Compare commits

...
Sign in to create a new pull request.

255 commits

Author SHA1 Message Date
b87588e371 Merge pull request 'Tumblr/Bluesky: Avoid problems on first fetch' (#1452) from heluecht/friendica-addons:first-fetch into 2023.09-rc
Reviewed-on: friendica/friendica-addons#1452
2023-12-21 13:45:24 +01:00
96c70489f5 Tumblr/Bluesky: Avoid problems on first fetch 2023-12-21 05:23:38 +00:00
77ad52d1f4 Merge pull request 'Bluesky/Tumblr: Set "received" to "created" if fetched after previous poll' (#1451) from heluecht/friendica-addons:received into 2023.09-rc
Reviewed-on: friendica/friendica-addons#1451
2023-12-21 05:21:43 +01:00
96a354bc65 Bluesky/Tumblr: Set "received" to "created" if fetched after previous poll 2023-12-20 20:46:24 +00:00
f32c90dc9f Merge pull request '[s3_storage] Bump version of akeeba/s3 to version 2.3.1' (#1450) from MrPetovan/friendica-addons:bug/deprecated into 2023.09-rc
Reviewed-on: friendica/friendica-addons#1450
2023-12-20 14:17:01 +01:00
3e74af9775 [s3_storage] Bump version of akeeba/s3 to version 2.3.1
- Address https://github.com/friendica/friendica/issues/12011#issuecomment-1854681792
2023-12-18 21:28:16 -05:00
9daa11eb10 [woodpecker] Remove PHP 7.3 PHPUnit instance
- Friendica now supports at least PHP 7.4
2023-12-18 21:27:36 -05:00
011edb711c Merge pull request 'Invidious: The addon is now user definable' (#1449) from heluecht/friendica-addons:invidious-user into 2023.09-rc
Reviewed-on: friendica/friendica-addons#1449
2023-12-18 19:33:55 +01:00
cabdd924d0 Fix white spaces 2023-12-18 17:51:34 +00:00
8ba44cf5c6 Invidious: The addon is now user definable 2023-12-18 17:47:19 +00:00
dad3d477d3 Merge pull request 'translation updates' (#1448) from tobias/friendica-addons:20231216-lng into 2023.09-rc
Reviewed-on: friendica/friendica-addons#1448
2023-12-16 15:57:57 +01:00
3a063f999d translation updates 2023-12-16 08:59:07 +01:00
fa01357445 Merge pull request 'Tumblr: Improved error handling whe fetching blog information' (#1447) from heluecht/friendica-addons:tumblr-warning into 2023.09-rc
Reviewed-on: friendica/friendica-addons#1447
2023-12-11 14:21:12 +01:00
a41a676bfb Tumblr: Improved error handling whe fetching blog information 2023-12-11 14:21:12 +01:00
3b518462ab Merge pull request 'This addon will replace "youtube.com" with the chosen Invidious instance' (#1441) from loma-one/friendica-addons:develop into 2023.09-rc
Reviewed-on: friendica/friendica-addons#1441
2023-12-08 20:50:22 +01:00
d53ad98af2 invidious/invidious.php aktualisiert 2023-12-08 20:50:22 +01:00
372e75a91c invidious/invidious.php aktualisiert 2023-12-08 20:50:22 +01:00
f45f6ba992 https://youtu.be Link
Many thanks for the hint. With a small change '/watch?v=' the link to https://youtu.be now also works
2023-12-08 20:50:22 +01:00
26983977c4 This addon will replace "youtube.com" with the chosen Invidious instance
Suggestion from @heluecht for combined URLs adopted
2023-12-08 20:50:22 +01:00
90d897f4fa This addon will replace "youtube.com" with the chosen Invidious instance
URL combine
2023-12-08 20:50:22 +01:00
668ea972cc invidious/invidious.php aktualisiert 2023-12-08 20:50:22 +01:00
dc2d00b6c6 invidious/lang/C/messages.po aktualisiert 2023-12-08 20:50:22 +01:00
0f65c23490 invidious/invidious.php aktualisiert
Redirects from youtu.be do not work reliably. Therefore this one has been removed.
2023-12-08 20:50:22 +01:00
c98caaf417 Dateien nach "invidious" hochladen 2023-12-08 20:50:22 +01:00
f46980c736 Dateien nach "invidious/lang/C" hochladen 2023-12-08 20:50:22 +01:00
ebf5ff1276 Dateien nach "invidious/templates" hochladen 2023-12-08 20:50:22 +01:00
9d932e6fa0 Dateien nach "invidious" hochladen
Replaces links to youtube.com to an invidious instance in all displays of postings on a node.
2023-12-08 20:50:22 +01:00
46fdcc1c0e invidious gelöscht 2023-12-08 20:50:22 +01:00
eadbcc069f invidious hinzugefügt 2023-12-08 20:50:22 +01:00
2c2a813324 [pageheader] Improve visibility
Removed commented out code from your pull request
2023-12-08 20:50:22 +01:00
9315b185e8 pageheader/pageheader.css aktualisiert 2023-12-08 20:50:22 +01:00
d685663ac0 Coloured box added 2023-12-08 20:50:22 +01:00
727eca1ce7 Coloured box added
Among other things, I use the page header to inform about current maintenance work or other upcoming work. The information should therefore be provided within an appropriate framework. With a little CSS, the page header gets a frame in green. The font was adjusted to an appropriate size.
2023-12-08 20:50:22 +01:00
3b5e8901dc Merge pull request 'Bluesky: remove @ and spaces from the handle' (#1444) from heluecht/friendica-addons:bluesky-trim-handle into 2023.09-rc
Reviewed-on: friendica/friendica-addons#1444
2023-12-07 13:07:42 +01:00
50d8d44489 Bluesky: remove @ and spaces from the handle 2023-12-07 12:03:53 +00:00
b6d575c37f Merge pull request 'Bluesky: Improved status on the connector page' (#1443) from heluecht/friendica-addons:bluesky-status into 2023.09-rc
Reviewed-on: friendica/friendica-addons#1443
2023-12-06 15:31:04 +01:00
397282cbb3 Bluesky: Improved on the connector page 2023-12-06 06:31:52 +00:00
2c6add7aa1 Merge pull request 'Bluesky: Fix adding a new account' (#1442) from heluecht/friendica-addons:bluesky-auth into 2023.09-rc
Reviewed-on: friendica/friendica-addons#1442
2023-12-04 21:31:59 +01:00
22bf23b833 Bluesky: Fix adding a new account 2023-12-04 20:29:31 +00:00
ed8c5945da Merge pull request 'Bluesky: Provide the correct user id while fetching content' (#1439) from heluecht/friendica-addons:bluesky-notices into 2023.09-rc
Reviewed-on: friendica/friendica-addons#1439
2023-11-25 23:06:40 +01:00
14fd900628 Store hash tags 2023-11-25 22:00:45 +00:00
48cde643f6 Improved logging message 2023-11-25 19:02:10 +00:00
e62f6a9586 Bluesky: Provide the correct user id while fetching content 2023-11-25 18:57:03 +00:00
c2dfda5d72 Merge pull request 'Bluesky: Tags are now supported' (#1438) from heluecht/friendica-addons:bluesky-tag into 2023.09-rc
Reviewed-on: friendica/friendica-addons#1438
2023-11-21 16:50:06 +01:00
9595760800 Bluesky: Tags are now supported 2023-11-20 21:07:09 +00:00
1c91ee200e Merge pull request 'Bluesky: Support personal data servers' (#1437) from heluecht/friendica-addons:bluesky-pds into 2023.09-rc
Reviewed-on: friendica/friendica-addons#1437
2023-11-20 00:48:07 +01:00
00e30b5c2b Bluesky: Support personal data servers 2023-11-19 18:55:05 +00:00
5f5c53ab49 Merge pull request '[advancedcontentfilter] Fix obsolete reference to Repository\PostMedia->splitAttachments' (#1436) from MrPetovan/friendica-addons:bug/1434-advancedcontentfilter-splitAttachments into 2023.09-rc
Reviewed-on: friendica/friendica-addons#1436
2023-11-15 20:05:31 +01:00
Benjamin Lorteau
6a46d05bca [advancedcontentfilter] Fix obsolete reference to Repository\PostMedia->splitAttachments 2023-11-14 16:25:06 -05:00
8d3d0f267b Merge pull request 'Bluesky: Support for transmitted languages' (#1435) from heluecht/friendica-addons:languages into 2023.09-rc
Reviewed-on: friendica/friendica-addons#1435
2023-11-13 01:15:45 +01:00
66fdd31915 Bluesky: Support for transmitted languages 2023-11-11 05:30:07 +00:00
607cc9238c Merge pull request 'CLD2: Use ISO-639-1 for the language detection' (#1433) from heluecht/friendica-addons:ISO-639-1 into 2023.09-rc
Reviewed-on: friendica/friendica-addons#1433
2023-11-03 19:07:04 +01:00
2a782b512e CLD2: Use ISO-639-1 for the language detection 2023-11-02 22:54:19 +00:00
a75c9ba373 Merge pull request 'Bluesky: Fix warnings' (#1432) from heluecht/friendica-addons:warnings into 2023.09-rc
Reviewed-on: friendica/friendica-addons#1432
2023-10-29 16:11:19 +01:00
77765ff6ed Bluesky: Fix warnings 2023-10-29 16:11:19 +01:00
9c53c0c8d1 Merge pull request '[smileybutton] Add explicit conversion from float to int' (#1431) from warnings into 2023.09-rc
Reviewed-on: friendica/friendica-addons#1431
2023-10-29 12:40:31 +01:00
43c46ae6d9 [smileybutton] Add explicit conversion from float to int
Address part of https://github.com/friendica/friendica/issues/13157#issuecomment-1771572442
2023-10-29 12:40:31 +01:00
c7e06bfa53 Merge pull request 'Langfilter: Use two letter code for the language / Bluesky: Remove callstack' (#1430) from heluecht/friendica-addons:callstack-language into 2023.09-rc
Reviewed-on: friendica/friendica-addons#1430
2023-10-18 22:30:52 +02:00
6948a15f1c Langfilter: Use two letter code for the language / Bluesky: Remove callstack 2023-10-18 22:30:52 +02:00
74c56c32b0 Merge pull request 'Upgrade PHP version in CI' (#1429) from nupplaPhil/friendica-addons:feat/phpunit_upgrade into 2023.09-rc
Reviewed-on: friendica/friendica-addons#1429
2023-10-13 15:21:46 +02:00
9bdaa8092e
Upgrade phpunit version in PHP-CI 2023-10-12 21:33:03 +02:00
b11538d195 Merge pull request 'CLD: Keep the original detected language array' (#1428) from heluecht/friendica-addons:cld into 2023.09-rc
Reviewed-on: friendica/friendica-addons#1428
2023-10-12 13:36:58 +02:00
73c6a0ff0c CLD: Keep the original detected language array 2023-10-11 18:57:04 +00:00
fbafa80815 Merge pull request 'CLD: New plugin for language detection via CLD2' (#1425) from heluecht/friendica-addons:cld2 into 2023.09-rc
Reviewed-on: friendica/friendica-addons#1425
2023-10-07 07:07:00 +02:00
92251f4a6c Updated CLD installation description 2023-10-07 07:07:00 +02:00
18266ea6ef Changed hook parameter / more languages added 2023-10-07 07:07:00 +02:00
80ce855189 Renamed hook 2023-10-07 07:07:00 +02:00
0eda161e04 Cleaned up code 2023-10-07 07:07:00 +02:00
981e6821d0 CLD: New plugin for language detection via CLD2 2023-10-07 07:07:00 +02:00
a5ed02ed23 Merge pull request '[CI/CD] Kick CI again' (#1427) from nupplaPhil/friendica-addons:2023.09-rc into 2023.09-rc
Reviewed-on: friendica/friendica-addons#1427
2023-10-05 22:10:33 +02:00
7a8f8fcbd2
[CI/CD] Kick CI again 2023-10-05 21:58:35 +02:00
30b9f73f5e
[CI/CD] Kick CI again 2023-10-05 21:57:17 +02:00
be8d8b9c10 Merge pull request 'Bluesky: Fix some issues when fetching posts' (#1424) from heluecht/friendica-addons:bluesky-fixes into develop
Reviewed-on: friendica/friendica-addons#1424
2023-10-03 03:54:41 +02:00
16d99dbdfc Bluesky: Fix some issues when fetching posts 2023-10-01 04:37:11 +00:00
410613d7a0 Merge pull request 'Tumblr/Bluesky: Store the subscribed feed/tag' (#1416) from heluecht/friendica-addons:subscription into develop
Reviewed-on: friendica/friendica-addons#1416
2023-08-28 16:42:36 +02:00
af31a988aa Tumblr/Bluesky: Store the subscribed feed/tag 2023-08-28 16:42:23 +02:00
187ba8383d Merge pull request '[bluesky] Fix double dollar sign in bluesky_fetch_notifications' (#1415) from MrPetovan/friendica-addons:bug/warnings into develop
Reviewed-on: friendica/friendica-addons#1415
2023-08-28 06:51:12 +02:00
c89abdb74c [bluesky] Fix double dollar sign in bluesky_fetch_notifications 2023-08-22 09:01:12 -04:00
b76f143e60 Merge pull request 'Audon audioplayer App' (#1414) from loma-one/friendica-addons:develop into develop
Reviewed-on: friendica/friendica-addons#1414
2023-08-18 18:41:32 +02:00
94a4c93368 audon/lang/C/messages.po aktualisiert 2023-08-18 18:41:32 +02:00
dfbf8d4acf audon/lang/C/messages.po hinzugefügt 2023-08-18 18:41:32 +02:00
983d334ef5 audon/C/messages.po gelöscht 2023-08-18 18:41:32 +02:00
2fa030aa65 audon/C/messages.po aktualisiert 2023-08-18 18:41:32 +02:00
7ef59da623 audon/C/messages.po hinzugefügt 2023-08-18 18:41:32 +02:00
476fdd1bb7 audon/lang/C gelöscht
Signed-off-by: loma-one <loma-one@noreply.git.friendi.ca>
2023-08-18 18:41:32 +02:00
9786b605b6 audon/lang/C aktualisiert
now :)
2023-08-18 18:41:32 +02:00
a26c2c9758 audon/lang/C aktualisiert 2023-08-18 18:41:32 +02:00
8ef6fafdaa audon/audon.php aktualisiert 2023-08-18 18:41:32 +02:00
c93e6840fa audon/audon.php aktualisiert 2023-08-18 18:41:32 +02:00
65d8e467fe audon/templates/admin.tpl aktualisiert 2023-08-18 18:41:32 +02:00
38460a4cff audon/audon.php aktualisiert 2023-08-18 18:41:32 +02:00
db218ac4f6 audon/audon.php aktualisiert 2023-08-18 18:41:32 +02:00
e391a65695 „audon/audon.php“ ändern 2023-08-18 18:41:32 +02:00
a3dc032a51 „audon/lang/C“ hinzufügen 2023-08-18 18:41:32 +02:00
9035144e5b Dateien hochladen nach „audon/templates“ 2023-08-18 18:41:32 +02:00
4e17f3c9db „audon/admin.tpl“ löschen 2023-08-18 18:41:32 +02:00
630f4ab991 „audon/messages.po“ löschen 2023-08-18 18:41:32 +02:00
effa19c467 Audon Audio Chat based on the WebRTC Addon
This Addon based on webrtc. Audon is a service of realtime audio chat.
With small changes, the WebRTC addon could be adapted to Audon so that it can be loaded into an iframe. In the ifram, the Friendica handle can be connected and a room opened. Audio conversations between Friendica users are possible.
https://github.com/friendica/friendica-addons/pull/1357
2023-08-18 18:41:32 +02:00
6d200dd419 Merge pull request 'Twitter: Fix posting' (#1413) from heluecht/friendica-addons:resize into develop
Reviewed-on: friendica/friendica-addons#1413
2023-08-16 20:58:34 +02:00
340f3f41d7 Twitter: Fix posting 2023-08-16 14:58:04 -04:00
886638f8a5 Merge pull request 'Simplified status display' (#1412) from heluecht/friendica-addons:resize into develop
Reviewed-on: friendica/friendica-addons#1412
2023-08-16 12:27:28 +02:00
339c88353b Test the connection when API credential changed 2023-08-16 12:27:28 +02:00
a3e24a55ec Last status is split for better readability 2023-08-16 12:27:28 +02:00
3d6748eaf7 Simplified status display 2023-08-16 12:27:28 +02:00
fb9e6e5df6 Merge pull request 'Nluesky/Twitter: Resize picture before uploading' (#1411) from heluecht/friendica-addons:resize into develop
Reviewed-on: friendica/friendica-addons#1411
2023-08-15 22:38:49 +02:00
8b66b3a194 Nluesky/Twitter: Resize picture before uploading 2023-08-15 20:25:17 +00:00
f39b25b437 Merge pull request 'Twitter: the connector now works as a posting only connector' (#1410) from heluecht/friendica-addons:twitter into develop
Reviewed-on: friendica/friendica-addons#1410
2023-08-10 23:51:37 +02:00
15ea39d830 Reformatted code 2023-08-10 21:36:09 +00:00
21006aec74 Resize picture before uploading 2023-08-10 21:26:10 +00:00
603c8defb1 Avoid upload problems by reducing the picture size 2023-08-10 06:46:17 +00:00
e004e20352 Transmit the media type 2023-08-09 23:13:37 +00:00
c0eac366fe Fix newlines 2023-08-09 20:08:32 +00:00
34f0fa7dc8 License readded 2023-08-09 20:07:29 +00:00
a97b3f690c Twitter: the connector now works as a posting only connector 2023-08-09 20:01:57 +00:00
5d13889f2c Merge pull request '[CI] Add .phpunit' (#1408) from nupplaPhil/friendica-addons:feat/strategies into develop
Reviewed-on: friendica/friendica-addons#1408
2023-07-28 19:51:39 +02:00
dc55b89e02
Unify "Capability" 2023-07-26 21:44:57 +02:00
d76b6b50c3
Introduce .phpunit 2023-07-26 19:19:07 +02:00
546841e3a2 Merge pull request '[monolog] Fix extra line' (#1407) from nupplaPhil/friendica-addons:bug/monolog into develop
Reviewed-on: friendica/friendica-addons#1407
2023-07-23 23:06:52 +02:00
bd405ec98a
[monolog] Fix extra line 2023-07-23 23:04:53 +02:00
923437e8b6 Merge pull request '[monolog] update/fix Monolog' (#1400) from nupplaPhil/friendica-addons:feat/addons into develop
Reviewed-on: friendica/friendica-addons#1400
2023-07-23 13:00:31 +02:00
d9c5419351 Adhere feedback
- rename hooks.config.php to strategies.config.php
- change all corresponding classes and tests
2023-07-23 13:00:31 +02:00
e315abc788 Add tests for InstanceManager and remove Decorator hook logic (avoid complex Dice logic) 2023-07-23 13:00:31 +02:00
745f9c1e5f Fix Monolog
- Use new hook-loading
2023-07-23 13:00:31 +02:00
f328dc2b83 Merge pull request 'Bluesky: Fix "E_WARNING: Undefined property: stdClass::$cid"' (#1405) from heluecht/friendica-addons:bluesky-warning into develop
Reviewed-on: friendica/friendica-addons#1405
2023-07-22 19:04:34 +02:00
3377ef3ba3 Bluesky: Fix "E_WARNING: Undefined property: stdClass::$cid" 2023-07-22 13:38:13 +00:00
5d666fbd1e Merge pull request 'Use "convertForUriId" whenever possible' (#1404) from heluecht/friendica-addons:more-privacy into develop
Reviewed-on: friendica/friendica-addons#1404
2023-07-17 14:05:14 +02:00
f4110880a1 Use "convertForUriId" whenever possible 2023-07-16 10:37:33 +00:00
a52fa4dfb0 Merge pull request 'Bluesky: Fix for quoted posts with media' (#1403) from heluecht/friendica-addons:bluesky-quote into develop
Reviewed-on: friendica/friendica-addons#1403
2023-07-09 15:49:48 +02:00
cf435277a7 Bluesky: Fix for quoted posts with media 2023-07-09 15:49:48 +02:00
61a5973937 Merge pull request 'Bluesky: don't remove hashtags upon posting' (#1402) from heluecht/friendica-addons:bluesky-tags into develop
Reviewed-on: friendica/friendica-addons#1402
2023-07-08 17:02:45 +02:00
d80d376762 Bluesky: don't remove hashtags upon posting 2023-07-08 14:54:56 +00:00
463f5eb7e0 Merge pull request '[showmoredyn] fix: tweak z-index to not clash with sidebar on mobile' (#1401) from csolisr/friendica-addons:fix-showmore-dyn-css into develop
Reviewed-on: friendica/friendica-addons#1401
2023-07-07 17:08:50 +02:00
e91fa307d0 fix: tweak z-index to not clash with sidebar on mobile
By default, the z-index of the toggle button is above the z-index of the sidebar on mobile devices. This fix tweaks the z-index so that it remains below the sidebar while it's open.
2023-07-07 17:02:44 +02:00
aa0d829de6 Merge pull request 'Bluesky: Tasks are now done by workers' (#1399) from heluecht/friendica-addons:bluesky-worker into develop
Reviewed-on: friendica/friendica-addons#1399
2023-06-19 00:29:53 +02:00
7795a53cb3 New functions to perform XRPC post/get commands 2023-06-13 20:43:51 +00:00
c85b559f69 Remove unicode character 2023-06-12 22:06:31 +00:00
9f0857af1d Bluesky: Tasks are now done by workers 2023-06-11 19:24:44 +00:00
ba1af2b73e Merge pull request 'Bluesky: Improved link transmission /thread import' (#1398) from heluecht/friendica-addons:bluesky-links into develop
Reviewed-on: friendica/friendica-addons#1398
2023-06-07 00:47:37 +02:00
e67097e0e8 Bluesky: Improved link transmission /thread import 2023-06-07 00:47:37 +02:00
2183bace8a Merge pull request '[bluesky] added DE, ZH-CN translation' (#1397) from tobias/friendica-addons:20230605-lng into develop
Reviewed-on: friendica/friendica-addons#1397
2023-06-05 18:58:05 +02:00
c740573b99 [bluesky] added DE, ZH-CN translation 2023-06-05 18:58:05 +02:00
db4546c190 Merge pull request 'Bluesky: Pinned feeds can now be imported' (#1396) from heluecht/friendica-addons:bluesky-feeds into develop
Reviewed-on: friendica/friendica-addons#1396
2023-06-05 07:08:19 +02:00
2a4bfae9b3 Bluesky: Pinned feeds can now be imported 2023-06-05 04:36:50 +00:00
aa9f0c2281 Merge pull request 'Bluesky: Import is mosty feature complete' (#1395) from heluecht/friendica-addons:bluesky into develop
Reviewed-on: friendica/friendica-addons#1395
2023-06-04 02:56:58 +02:00
5d614bc6d3 Bluesky: Import is mosty feature complete 2023-06-03 23:06:31 +00:00
9557b5e000 Merge pull request 'Rename group and forum' (#1394) from MrPetovan/friendica-addons:task/13114-rename-group-forum into develop
Reviewed-on: friendica/friendica-addons#1394
2023-06-04 00:20:07 +02:00
49d308c44b [various] Rename forum to group
- Drop support for forumdirectory
- Add support for groupdirectory
2023-06-04 00:20:07 +02:00
aa0f74832a [various] Rename group to circle
- Drop support for group_text
- Add support for circle_text
2023-06-04 00:20:07 +02:00
941b8c5a14 Merge pull request '[nsfw] Rewrite string condition to avoid warning message' (#1393) from MrPetovan/friendica-addons:bug/warnings into develop
Reviewed-on: friendica/friendica-addons#1393
2023-05-30 07:20:35 +02:00
9bfb5e879d [nsfw] Rewrite string condition to avoid warning message
- Address https://github.com/friendica/friendica/issues/13157#issuecomment-1567337197
2023-05-29 19:34:01 -04:00
54f4a054c7 Merge pull request 'catch exception during http request' (#1392) from mexon/friendica-addons:mat/mailstream-exception into develop
Reviewed-on: friendica/friendica-addons#1392
2023-05-28 16:46:42 +02:00
Matthew Exon
9832fa6c45 catch exception during http request 2023-05-28 11:02:32 +02:00
2ce14fb2ff Merge pull request 'Deprecated Addon Blockem removed' (#1391) from andy/friendica-addons:develop into develop
Reviewed-on: friendica/friendica-addons#1391
2023-05-27 14:37:04 +02:00
82c2f8e37f Deprecated Addon Blockem removed 2023-05-27 10:18:51 +07:00
5c45c05cdb Merge pull request 'Bluesky: Improved import and export' (#1390) from heluecht/friendica-addons:bluesky-import2 into develop
Reviewed-on: friendica/friendica-addons#1390
2023-05-26 23:13:31 +02:00
c45c163471 Bluesly: Improved import and export 2023-05-26 20:54:00 +00:00
cd7cec1de2 Merge pull request 'Bluesky: readme is updated' (#1389) from heluecht/friendica-addons:bluesky-import into develop
Reviewed-on: friendica/friendica-addons#1389
2023-05-24 13:16:29 +02:00
d8fe3bd119 Merge remote-tracking branch 'upstream/develop' into bluesky-import 2023-05-24 06:11:09 +00:00
e19fafa918 Updated readme 2023-05-24 06:09:25 +00:00
421964b406 Merge pull request 'Bluesky: Import of remote timeline' (#1388) from heluecht/friendica-addons:bluesky-import into develop
Reviewed-on: friendica/friendica-addons#1388
2023-05-24 08:00:33 +02:00
6ade40efae Merge remote-tracking branch 'upstream/develop' into bluesky-import 2023-05-24 06:00:04 +00:00
435a993502 Bluesky: updated messages.po 2023-05-24 05:53:12 +00:00
16a5a895bb Bluesky import and transmission of activities is now possible 2023-05-24 05:49:26 +00:00
f2cc0312ca Merge pull request 'Bluesky: readme is added' (#1387) from heluecht/friendica-addons:bluesky-readme into 2023.05-rc
Reviewed-on: friendica/friendica-addons#1387
2023-05-23 13:26:08 +02:00
e3ca7c73ce Merge pull request 'HU translation updates THX Balázs Úr' (#1386) from tobias/friendica-addons:20230523-hu into 2023.05-rc
Reviewed-on: friendica/friendica-addons#1386
2023-05-23 07:47:43 +02:00
654a9da297 Bluesky: readme is added 2023-05-23 05:45:18 +00:00
1fe81df15d Bluesky: Import of remote timeline 2023-05-23 05:23:13 +00:00
7a1af5fb5b HU translation updates 2023-05-23 06:46:36 +02:00
a4b91826ba Merge pull request 'Bluesky: Basic connector for Bluesky is added' (#1385) from heluecht/friendica-addons:bluesky into 2023.05-rc
Reviewed-on: friendica/friendica-addons#1385
2023-05-22 02:59:36 +02:00
a7ea815642 Post up to 4 images 2023-05-21 20:14:20 +00:00
ea6e79448d Simplify token creation 2023-05-21 19:25:57 +00:00
77813a2acd Make the host readonly 2023-05-21 18:58:05 +00:00
dff48c3295 Bluesky: Basic connector for Bluesky is added 2023-05-21 18:54:02 +00:00
e91962b0b6 Merge pull request '[various] Ensure probe_detect hook functions don't set the result key with an empty array' (#1382) from MrPetovan/friendica-addons:bug/13080-probe_detect-result into develop
Reviewed-on: friendica/friendica-addons#1382
2023-05-06 12:24:07 +02:00
e0778d2bdd Merge pull request 'use new style of accessing baseUrl' (#1384) from mexon/friendica-addons:mailstream-fix-3 into develop
Reviewed-on: friendica/friendica-addons#1384
2023-05-05 18:46:25 +02:00
Matthew Exon
631bfd83e9 use new style of accessing baseUrl 2023-05-05 18:08:51 +02:00
4b31588484 Merge pull request 'remove App arguments' (#1383) from mexon/friendica-addons:mailstream-fix-2 into develop
Reviewed-on: friendica/friendica-addons#1383
2023-05-05 17:40:52 +02:00
Matthew Exon
8886c90d1e remove App arguments 2023-05-05 17:36:11 +02:00
f5d8604e59 [twitter] Return null in the probe_detect hook result key on unsuccessful probe
- Add authoritative probe result setting
2023-05-05 00:08:17 -04:00
a0574ab045 [tumblr] Have tumblr_get_contact_by_url return null for unsuccessful probe
- Add result setting for unsuccessful authoritative probe
2023-05-05 00:07:24 -04:00
e1de842ffb Merge pull request '[piwik] updated DE translation' (#1381) from tobias/friendica-addons:20230501-de into develop
Reviewed-on: friendica/friendica-addons#1381
2023-05-01 16:42:03 +02:00
ca134e9ed3 [piwik] updated DE translation 2023-05-01 10:05:20 +02:00
1a2554fe95 Merge pull request '[piwiki] regenerated messages-po file' (#1380) from 20230501-piwik into develop
Reviewed-on: friendica/friendica-addons#1380
2023-05-01 07:42:53 +02:00
13da605435 [piwiki] regenerated messages-po file 2023-05-01 07:40:12 +02:00
df2e9863ed Merge pull request '[piwik] Short Endpoint option' (#1379) from EntropyEngineer/friendica-addons:piwik-Short-Endpoint-option into develop
Reviewed-on: friendica/friendica-addons#1379
2023-04-30 13:43:35 +02:00
199205a07c [piwik] Short Endpoint option 2023-04-30 10:34:28 +02:00
94eb2ec197 Merge pull request 'Tumblr: Users can now follow tags' (#1378) from heluecht/friendica-addons:tumblr-tags into develop
Reviewed-on: friendica/friendica-addons#1378
2023-04-29 21:23:58 +02:00
58fce248c1 Use ?? instead of the parameter for the default value 2023-04-29 19:16:51 +00:00
dcd097b5b0 Tumblr: Users can now follow tags 2023-04-29 06:56:51 +00:00
040c735243 Merge pull request 'Repair broken log line' (#1377) from mexon/friendica-addons:mailstream-fix into develop
Reviewed-on: friendica/friendica-addons#1377
2023-04-28 23:14:58 +02:00
Matthew Exon
4eedc9423a Repair broken log line 2023-04-28 23:09:40 +02:00
c4876d46b4 Merge pull request 'Tumblr: Added support for hook "support_probe"' (#1376) from heluecht/friendica-addons:tumblr-support-probe into develop
Reviewed-on: friendica/friendica-addons#1376
2023-04-27 13:59:07 +02:00
8400258f07 Tumblr: Added support for hook "support_probe" 2023-04-27 05:28:05 +00:00
8f29a51277 Merge branch 'develop' into stable 2023-04-27 07:24:05 +02:00
b34c9131ca recovered [mailstream] various modernisations
These changes where made on github as #1354 but got lost due mirroring
issued from the development branch. Original author is mexon.

https://github.com/friendica/friendica-addons/pull/1354
2023-04-27 07:21:20 +02:00
a733e82c21 Merge pull request 'Tumblr: Small fixes' (#1375) from heluecht/friendica-addons:tumblr-fixes into develop
Reviewed-on: friendica/friendica-addons#1375
2023-04-27 07:12:19 +02:00
5d8a53b8ec Tumblr: Small fixes 2023-04-27 05:00:04 +00:00
dac297b942 Merge pull request 'Tumblr: We can now follow, unfollow, add posts, ...' (#1374) from heluecht/friendica-addons:tumblr-complete into develop
Reviewed-on: friendica/friendica-addons#1374
2023-04-27 01:39:01 +02:00
dc02e16575 Tumblr: We can now follow, unfollow, add posts, ... 2023-04-26 22:15:59 +00:00
d8af084933 Merge pull request 'Tumblr is now using OAuth2' (#1373) from heluecht/friendica-addons:tumblr-oauth2 into develop
Reviewed-on: friendica/friendica-addons#1373
2023-04-25 21:15:07 +02:00
477e646fba Further updated the readme 2023-04-25 18:48:58 +00:00
5307ef3a58 Updated readme 2023-04-25 18:47:54 +00:00
4c3b4dea96 Improved result check 2023-04-25 18:38:18 +00:00
c811f54958 Tumblr is now using OAuth2 2023-04-25 18:33:39 +00:00
becf10cee6 Merge pull request 'Tumblr: We can now import the remote timeline' (#1372) from heluecht/friendica-addons:tumblr-import into develop
Reviewed-on: friendica/friendica-addons#1372
2023-04-24 01:38:19 +02:00
bb72210fc1 Merge remote-tracking branch 'upstream/develop' into tumblr-import 2023-04-23 21:14:50 +00:00
da65314df5 Resructured code, added documentation 2023-04-23 10:26:19 +00:00
fbf3653831 Merge pull request 'HU and IT translation updates' (#1371) from tobias/friendica-addons:20230421-lng into 2023.03-rc
Reviewed-on: friendica/friendica-addons#1371
2023-04-22 16:39:15 +02:00
9e7f06ed44 Tumblr: Dashboard import and activities are working 2023-04-22 10:01:09 +00:00
c137fc5e79 HU and IT translation updates 2023-04-21 21:41:23 +02:00
9c8e7a23a6 Add more types 2023-04-18 21:05:31 +00:00
71eb147c13 Tumblr: Import the timeline 2023-04-18 05:56:32 +00:00
5cae2bffb2 Merge pull request 'Tumblr: Make it compatible with PHP 7.4.0' (#1370) from heluecht/friendica-addons:tumblr-php-7.4 into 2023.03-rc
Reviewed-on: friendica/friendica-addons#1370
2023-04-11 20:03:50 +02:00
972c2da98e Tumblr: Make it compatible with PHP 7.4.0 2023-04-11 14:56:52 +00:00
8a83cc2886 Merge pull request 'Tumblr: wrong "page" values are corrected automatically' (#1369) from heluecht/friendica-addons:tumblr-page into 2023.03-rc
Reviewed-on: friendica/friendica-addons#1369
2023-04-10 13:37:35 +02:00
c94778dbc1 tumblr: wrong "page" values are corrected automatically 2023-04-10 10:18:21 +00:00
9f0b5829c0 Merge pull request '[securemail] Bump phpseclib dependency to version 3.0.19' (#1362) from MrPetovan/friendica-addons:bug/dependabot into 2023.03-rc
Reviewed-on: friendica/friendica-addons#1362
2023-04-10 12:03:58 +02:00
7bc98f0dd9 Merge pull request 'translations updates for 2023.03' (#1368) from tobias/friendica-addons:20230409-lngs into 2023.03-rc
Reviewed-on: friendica/friendica-addons#1368
2023-04-09 08:22:09 +02:00
1c677722b3 translations updates for 2023.03 2023-04-09 07:58:49 +02:00
99639632dd No need to fetch the return data since we don't use it 2023-04-09 05:06:52 +00:00
91bb323a16 Merge pull request 'Tumblr: Use the UUID to address the blog' (#1367) from heluecht/friendica-addons:tumblr-blog into 2023.03-rc
Reviewed-on: friendica/friendica-addons#1367
2023-04-09 06:56:18 +02:00
852ddb8acc Tumblr: Use the UUID to address the blog 2023-04-09 04:43:12 +00:00
9732ad543b Merge pull request 'Tumblr: Possible fixes' (#1366) from heluecht/friendica-addons:tumblr into 2023.03-rc
Reviewed-on: friendica/friendica-addons#1366
2023-04-08 19:14:27 +02:00
37cdd74d73 Tumblr: Possible fixes 2023-04-08 16:49:52 +00:00
c1830d8fd1 Merge pull request 'Tumblr: Fix #11551 and introduce NPF' (#1364) from heluecht/friendica-addons:tumblr-npf into 2023.03-rc
Reviewed-on: friendica/friendica-addons#1364
2023-04-06 23:23:04 +02:00
7dc1b44d1e Tumblr: Fix #11551 and introduce NPF 2023-04-06 19:10:32 +00:00
3f2cc73936 [securemail] Bump phpseclib dependency to version 3.0.19 2023-04-06 08:26:37 -04:00
94129d3aa5 Merge pull request 'migrate transifex config to the new client' (#1363) from tobias/friendica-addons:20230406-transifexconfig into 2023.03-rc
Reviewed-on: friendica/friendica-addons#1363
2023-04-06 14:07:28 +02:00
5ea5930d82 migrate transifex config to the new client 2023-04-06 11:12:54 +02:00
efdc4fa3c0 Merge pull request 'Tumblr: Transmit multiple photos' (#1361) from heluecht/friendica-addons:tumblr-photos into develop
Reviewed-on: friendica/friendica-addons#1361
2023-03-09 22:02:22 +01:00
888dec1593 Remove media to avoid duplicated images 2023-03-09 20:59:42 +00:00
82376e4f17 Tumblr: Transmit multiple photos 2023-03-09 06:37:02 +00:00
2805395f77 Merge pull request '"getAttachedData" has been removed' (#1359) from heluecht/friendica-addons:no-attached-data into develop
Reviewed-on: friendica/friendica-addons#1359
2023-03-06 16:06:13 +01:00
f5d1316212 Merge remote-tracking branch 'upstream/develop' into no-attached-data 2023-03-06 06:33:09 +00:00
b46e8ec4b2 Merge pull request 'Blockbot: Changed loglevels' (#1360) from heluecht/friendica-addons:blockbot into develop
Reviewed-on: friendica/friendica-addons#1360
2023-03-06 04:27:49 +01:00
878538c151 Access media via index 2023-03-06 00:49:30 +00:00
a959a90582 Class added 2023-03-05 21:37:28 +00:00
c8b6e7661b Unused variable removed 2023-03-05 21:35:14 +00:00
9183371062 "getAttachedData" has been removed 2023-03-05 21:17:14 +00:00
8641c30530 Merge remote-tracking branch 'upstream/develop' into develop 2023-03-05 14:03:51 +00:00
388f6e94f0 Blockbot: Loglevel and reformatting 2023-03-05 14:01:32 +00:00
2dd57a2f40 Merge pull request 'Adapt .editorconfig for PHPStorm' (#1358) from nupplaPhil/friendica-addons:feat/phpstorm_editorconfig into develop
Reviewed-on: friendica/friendica-addons#1358
2023-02-28 21:02:26 +01:00
92c3d0cf6c
ident_size 2 is better for XML readability :) 2023-02-27 20:57:18 +01:00
c5d402ad62
Adapt .editorconfig
- Add .json rule
- Add .xml rule
2023-02-27 20:34:46 +01:00
ecdd62eb3c
Revert quote_type 2023-02-27 20:11:07 +01:00
4a57f968f8
Adapt .editorconfig for PHPStorm 2023-02-27 19:51:03 +01:00
30af3b93ed [blockem] Fix syntax error (#1357) 2023-02-20 18:13:57 +01:00
6a5103964f [blockem] Fix syntax error 2023-02-20 11:56:13 -05:00
6b3dc35f35 Merge pull request '[various] Adapt BaseURL calls for new UriInterface' (#1356) from nupplaPhil/friendica-addons:feat/system_url_handling into develop
Reviewed-on: friendica/friendica-addons#1356
2023-02-20 14:42:56 +01:00
648fadedd3
[various] Adapt BaseURL calls for new UriInterface 2023-02-18 21:04:47 +01:00
75df306424 Merge pull request 'mark the Twitter addon as unsupported' (#1354) from tobias/friendica-addons:twitterunsupport into develop
Reviewed-on: friendica/friendica-addons#1354
2023-02-07 14:18:04 +01:00
ace982f5e6 mark the Twitter addon as unsupported 2023-02-07 08:42:40 +01:00
b7614c9164
Merge pull request #1353 from annando/config
Twitter: Move config to key value
2023-01-22 16:33:21 -05:00
Michael Vogel
85275d4473
Apply suggestions from code review
Co-authored-by: Hypolite Petovan <hypolite@mrpetovan.com>
2023-01-22 21:39:12 +01:00
17df97fccd Twitter: Move config to key value 2023-01-22 13:45:33 +00:00
1240 changed files with 77251 additions and 41490 deletions

View file

@ -6,5 +6,24 @@ root = true
[*]
charset = utf-8
end_of_line = lf
trim_trailing_whitespaces = true
indent_style = tab
trim_trailing_whitespace = true
insert_final_newline = true
quote_type = single
max_line_length = off
[*.js]
quote_type = double
ij_javascript_use_double_quotes = true
[*.yml]
indent_style = space
indent_size = 2
[*.xml]
indent_style = space
indent_size = 2
[*.json]
indent_style = space
indent_size = 2

View file

@ -1,399 +1,399 @@
[main]
host = https://www.transifex.com
host = https://api.transifex.com
[friendica.addon_advancedcontentfilter_messagespo]
[o:Friendica:p:friendica:r:addon_advancedcontentfilter_messagespo]
file_filter = advancedcontentfilter/lang/<lang>/messages.po
source_file = advancedcontentfilter/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_blackout_messagespo]
[o:Friendica:p:friendica:r:addon_blackout_messagespo]
file_filter = blackout/lang/<lang>/messages.po
source_file = blackout/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_blockem_messagespo]
[o:Friendica:p:friendica:r:addon_blockem_messagespo]
file_filter = blockem/lang/<lang>/messages.po
source_file = blockem/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_blogger_messagespo]
[o:Friendica:p:friendica:r:addon_blogger_messagespo]
file_filter = blogger/lang/<lang>/messages.po
source_file = blogger/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_buffer_messagespo]
[o:Friendica:p:friendica:r:addon_buffer_messagespo]
file_filter = buffer/lang/<lang>/messages.po
source_file = buffer/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_buglink_messagespo]
[o:Friendica:p:friendica:r:addon_buglink_messagespo]
file_filter = buglink/lang/<lang>/messages.po
source_file = buglink/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_catavatar_messagespo]
[o:Friendica:p:friendica:r:addon_catavatar_messagespo]
file_filter = catavatar/lang/<lang>/messages.po
source_file = catavatar/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_cookienotice_messagespo]
[o:Friendica:p:friendica:r:addon_cookienotice_messagespo]
file_filter = cookienotice/lang/<lang>/messages.po
source_file = cookienotice/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_curweather_messagespo]
[o:Friendica:p:friendica:r:addon_curweather_messagespo]
file_filter = curweather/lang/<lang>/messages.po
source_file = curweather/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_diaspora_messagespo]
[o:Friendica:p:friendica:r:addon_diaspora_messagespo]
file_filter = diaspora/lang/<lang>/messages.po
source_file = diaspora/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_dwpost_messagespo]
[o:Friendica:p:friendica:r:addon_dwpost_messagespo]
file_filter = dwpost/lang/<lang>/messages.po
source_file = dwpost/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_forumdirectory_messagespo]
[o:Friendica:p:friendica:r:addon_forumdirectory_messagespo]
file_filter = forumdirectory/lang/<lang>/messages.po
source_file = forumdirectory/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_fromapp_messagespo]
[o:Friendica:p:friendica:r:addon_fromapp_messagespo]
file_filter = fromapp/lang/<lang>/messages.po
source_file = fromapp/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_fromgplus_messagespo]
[o:Friendica:p:friendica:r:addon_fromgplus_messagespo]
file_filter = fromgplus/lang/<lang>/messages.po
source_file = fromgplus/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_geonames_messagespo]
[o:Friendica:p:friendica:r:addon_geonames_messagespo]
file_filter = geonames/lang/<lang>/messages.po
source_file = geonames/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_gnot_messagespo]
[o:Friendica:p:friendica:r:addon_gnot_messagespo]
file_filter = gnot/lang/<lang>/messages.po
source_file = gnot/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_gravatar_messagespo]
[o:Friendica:p:friendica:r:addon_gravatar_messagespo]
file_filter = gravatar/lang/<lang>/messages.po
source_file = gravatar/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_group_text_messagespo]
[o:Friendica:p:friendica:r:addon_group_text_messagespo]
file_filter = group_text/lang/<lang>/messages.po
source_file = group_text/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_ifttt_messagespo]
[o:Friendica:p:friendica:r:addon_ifttt_messagespo]
file_filter = ifttt/lang/<lang>/messages.po
source_file = ifttt/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_ijpost_messagespo]
[o:Friendica:p:friendica:r:addon_ijpost_messagespo]
file_filter = ijpost/lang/<lang>/messages.po
source_file = ijpost/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_impressum_messagespo]
[o:Friendica:p:friendica:r:addon_impressum_messagespo]
file_filter = impressum/lang/<lang>/messages.po
source_file = impressum/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_infiniteimprobabilitydrive_messagespo]
[o:Friendica:p:friendica:r:addon_infiniteimprobabilitydrive_messagespo]
file_filter = infiniteimprobabilitydrive/lang/<lang>/messages.po
source_file = infiniteimprobabilitydrive/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_irc_messagespo]
[o:Friendica:p:friendica:r:addon_irc_messagespo]
file_filter = irc/lang/<lang>/messages.po
source_file = irc/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_jappixmini_messagespo]
[o:Friendica:p:friendica:r:addon_jappixmini_messagespo]
file_filter = jappixmini/lang/<lang>/messages.po
source_file = jappixmini/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_js_upload_messagespo]
[o:Friendica:p:friendica:r:addon_js_upload_messagespo]
file_filter = js_upload/lang/<lang>/messages.po
source_file = js_upload/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_krynn_messagespo]
[o:Friendica:p:friendica:r:addon_krynn_messagespo]
file_filter = krynn/lang/<lang>/messages.po
source_file = krynn/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_langfilter_messagespo]
[o:Friendica:p:friendica:r:addon_langfilter_messagespo]
file_filter = langfilter/lang/<lang>/messages.po
source_file = langfilter/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_libertree_messagespo]
[o:Friendica:p:friendica:r:addon_libertree_messagespo]
file_filter = libertree/lang/<lang>/messages.po
source_file = libertree/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_libravatar_messagespo]
[o:Friendica:p:friendica:r:addon_libravatar_messagespo]
file_filter = libravatar/lang/<lang>/messages.po
source_file = libravatar/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_ljpost_messagespo]
[o:Friendica:p:friendica:r:addon_ljpost_messagespo]
file_filter = ljpost/lang/<lang>/messages.po
source_file = ljpost/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_mailstream_messagespo]
[o:Friendica:p:friendica:r:addon_mailstream_messagespo]
file_filter = mailstream/lang/<lang>/messages.po
source_file = mailstream/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_mathjax_messagespo]
[o:Friendica:p:friendica:r:addon_mathjax_messagespo]
file_filter = mathjax/lang/<lang>/messages.po
source_file = mathjax/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_membersince_messagespo]
[o:Friendica:p:friendica:r:addon_membersince_messagespo]
file_filter = membersince/lang/<lang>/messages.po
source_file = membersince/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_morechoice_messagespo]
[o:Friendica:p:friendica:r:addon_morechoice_messagespo]
file_filter = morechoice/lang/<lang>/messages.po
source_file = morechoice/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_morepokes_messagespo]
[o:Friendica:p:friendica:r:addon_morepokes_messagespo]
file_filter = morepokes/lang/<lang>/messages.po
source_file = morepokes/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_newmemberwidget_messagespo]
[o:Friendica:p:friendica:r:addon_newmemberwidget_messagespo]
file_filter = newmemberwidget/lang/<lang>/messages.po
source_file = newmemberwidget/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_notifyall_messagespo]
[o:Friendica:p:friendica:r:addon_notifyall_messagespo]
file_filter = notifyall/lang/<lang>/messages.po
source_file = notifyall/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_notimeline_messagespo]
[o:Friendica:p:friendica:r:addon_notimeline_messagespo]
file_filter = notimeline/lang/<lang>/messages.po
source_file = notimeline/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_nsfw_messagespo]
[o:Friendica:p:friendica:r:addon_nsfw_messagespo]
file_filter = nsfw/lang/<lang>/messages.po
source_file = nsfw/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_numfriends_messagespo]
[o:Friendica:p:friendica:r:addon_numfriends_messagespo]
file_filter = numfriends/lang/<lang>/messages.po
source_file = numfriends/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_openstreetmap_messagespo]
[o:Friendica:p:friendica:r:addon_openstreetmap_messagespo]
file_filter = openstreetmap/lang/<lang>/messages.po
source_file = openstreetmap/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_pageheader_messagespo]
[o:Friendica:p:friendica:r:addon_pageheader_messagespo]
file_filter = pageheader/lang/<lang>/messages.po
source_file = pageheader/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_piwik_messagespo]
[o:Friendica:p:friendica:r:addon_piwik_messagespo]
file_filter = piwik/lang/<lang>/messages.po
source_file = piwik/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_planets_messagespo]
[o:Friendica:p:friendica:r:addon_planets_messagespo]
file_filter = planets/lang/<lang>/messages.po
source_file = planets/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_public_server_messagespo]
[o:Friendica:p:friendica:r:addon_public_server_messagespo]
file_filter = public_server/lang/<lang>/messages.po
source_file = public_server/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_pumpio_messagespo]
[o:Friendica:p:friendica:r:addon_pumpio_messagespo]
file_filter = pumpio/lang/<lang>/messages.po
source_file = pumpio/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_qcomment_messagespo]
[o:Friendica:p:friendica:r:addon_qcomment_messagespo]
file_filter = qcomment/lang/<lang>/messages.po
source_file = qcomment/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_randplace_messagespo]
[o:Friendica:p:friendica:r:addon_randplace_messagespo]
file_filter = randplace/lang/<lang>/messages.po
source_file = randplace/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_remote_permissions_messagespo]
[o:Friendica:p:friendica:r:addon_remote_permissions_messagespo]
file_filter = remote_permissions/lang/<lang>/messages.po
source_file = remote_permissions/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_rendertime_messagespo]
[o:Friendica:p:friendica:r:addon_rendertime_messagespo]
file_filter = rendertime/lang/<lang>/messages.po
source_file = rendertime/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_securemail_messagespo]
[o:Friendica:p:friendica:r:addon_securemail_messagespo]
file_filter = securemail/lang/<lang>/messages.po
source_file = securemail/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_showmore_messagespo]
[o:Friendica:p:friendica:r:addon_showmore_messagespo]
file_filter = showmore/lang/<lang>/messages.po
source_file = showmore/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_smileybutton_messagespo]
[o:Friendica:p:friendica:r:addon_smileybutton_messagespo]
file_filter = smileybutton/lang/<lang>/messages.po
source_file = smileybutton/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_startpage_messagespo]
[o:Friendica:p:friendica:r:addon_startpage_messagespo]
file_filter = startpage/lang/<lang>/messages.po
source_file = startpage/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_statusnet_messagespo]
[o:Friendica:p:friendica:r:addon_statusnet_messagespo]
file_filter = statusnet/lang/<lang>/messages.po
source_file = statusnet/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_superblock_messagespo]
[o:Friendica:p:friendica:r:addon_superblock_messagespo]
file_filter = superblock/lang/<lang>/messages.po
source_file = superblock/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_testdrive_messagespo]
[o:Friendica:p:friendica:r:addon_testdrive_messagespo]
file_filter = testdrive/lang/<lang>/messages.po
source_file = testdrive/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_tictac_messagespo]
[o:Friendica:p:friendica:r:addon_tictac_messagespo]
file_filter = tictac/lang/<lang>/messages.po
source_file = tictac/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_tumblr_messagespo]
[o:Friendica:p:friendica:r:addon_tumblr_messagespo]
file_filter = tumblr/lang/<lang>/messages.po
source_file = tumblr/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_twitter_messagespo]
[o:Friendica:p:friendica:r:addon_twitter_messagespo]
file_filter = twitter/lang/<lang>/messages.po
source_file = twitter/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_viewsrc_messagespo]
[o:Friendica:p:friendica:r:addon_viewsrc_messagespo]
file_filter = viewsrc/lang/<lang>/messages.po
source_file = viewsrc/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_webrtc_messagespo]
[o:Friendica:p:friendica:r:addon_webrtc_messagespo]
file_filter = webrtc/lang/<lang>/messages.po
source_file = webrtc/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_widgets_messagespo]
[o:Friendica:p:friendica:r:addon_widgets_messagespo]
file_filter = widgets/lang/<lang>/messages.po
source_file = widgets/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_windowsphonepush_messagespo]
[o:Friendica:p:friendica:r:addon_windowsphonepush_messagespo]
file_filter = windowsphonepush/lang/<lang>/messages.po
source_file = windowsphonepush/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_wppost_messagespo]
[o:Friendica:p:friendica:r:addon_wppost_messagespo]
file_filter = wppost/lang/<lang>/messages.po
source_file = wppost/lang/C/messages.po
source_lang = en
type = PO
type = PO
[friendica.addon_xmpp_messagespo]
[o:Friendica:p:friendica:r:addon_xmpp_messagespo]
file_filter = xmpp/lang/<lang>/messages.po
source_file = xmpp/lang/C/messages.po
source_lang = en
type = PO
type = PO

113
.woodpecker/.phpunit.yml Normal file
View file

@ -0,0 +1,113 @@
matrix:
include:
- PHP_MAJOR_VERSION: 7.4
PHP_VERSION: 7.4.33
- PHP_MAJOR_VERSION: 8.0
PHP_VERSION: 8.0.30
- PHP_MAJOR_VERSION: 8.1
PHP_VERSION: 8.1.23
- PHP_MAJOR_VERSION: 8.2
PHP_VERSION: 8.2.11
# This forces PHP Unit executions at the "opensocial" labeled location (because of much more power...)
labels:
location: opensocial
skip_clone: true
pipeline:
clone_friendica_base:
image: alpine/git
commands:
- git clone https://github.com/friendica/friendica.git .
- git checkout $CI_COMMIT_BRANCH
clone_friendica_addon:
image: alpine/git
commands:
- git config --global user.email "no-reply@friendi.ca"
- git config --global user.name "Friendica"
- git clone $CI_REPO_LINK addon
- cd addon/
- git checkout $CI_COMMIT_BRANCH
- git fetch origin $CI_COMMIT_REF
- git merge $CI_COMMIT_SHA
restore_cache:
image: meltwater/drone-cache:dev
settings:
backend: "filesystem"
restore: true
cache_key: "{{ .Repo.Name }}_php${PHP_MAJOR_VERSION}_{{ arch }}_{{ os }}"
archive_format: "gzip"
mount:
- '.composer'
volumes:
- /tmp/drone-cache:/tmp/cache
composer_install:
image: friendicaci/php${PHP_MAJOR_VERSION}:php${PHP_VERSION}
commands:
- export COMPOSER_HOME=.composer
- ./bin/composer.phar validate
- ./bin/composer.phar install --prefer-dist
volumes:
- /etc/hosts:/etc/hosts
rebuild_cache:
image: meltwater/drone-cache:dev
settings:
backend: "filesystem"
rebuild: true
cache_key: "{{ .Repo.Name }}_php${PHP_MAJOR_VERSION}_{{ arch }}_{{ os }}"
archive_format: "gzip"
mount:
- '.composer'
volumes:
- /tmp/drone-cache:/tmp/cache
test:
image: friendicaci/php${PHP_MAJOR_VERSION}:php${PHP_VERSION}
environment:
MYSQL_HOST: "mariadb"
MYSQL_PORT: "3306"
MYSQL_DATABASE: "test"
MYSQL_PASSWORD: "test"
MYSQL_USER: "test"
REDIS_HOST: "redis"
MEMCACHED_HOST: "memcached"
MEMCACHE_HOST: "memcached"
commands:
- cp config/local-sample.config.php config/local.config.php
- if ! bin/wait-for-connection $MYSQL_HOST $MYSQL_PORT 300; then echo "[ERROR] Waited 300 seconds, no response" >&2; exit 1; fi
- mysql -h$MYSQL_HOST -P$MYSQL_PORT -p$MYSQL_PASSWORD -u$MYSQL_USER $MYSQL_DATABASE < database.sql
- if [ "${PHP_MAJOR_VERSION}" = "7.4" -a "${CI_REPO}" = "friendica/friendica-addons" ]; then
phpenmod xdebug;
export XDEBUG_MODE=coverage;
phpunit --configuration tests/phpunit-addons.xml --coverage-clover clover.xml;
else
phpunit --configuration tests/phpunit-addons.xml;
fi
codecov:
image: friendicaci/codecov
when:
matrix:
PHP_MAJOR_VERSION: 7.4
PHP_VERSION: 7.4.33
repo:
- friendica/friendica-addons
commands:
- codecov -R '.' -Z -f 'clover.xml'
secrets:
- source: codecov-token
target: codecov_token
services:
mariadb:
image: mariadb:latest
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: "true"
MYSQL_DATABASE: "test"
MYSQL_PASSWORD: "test"
MYSQL_USER: "test"
memcached:
image: memcached
redis:
image: redis

View file

@ -455,7 +455,7 @@ function advancedcontentfilter_prepare_item_row(array $item_row): array
$item_row['tags'] = $tags['tags'];
$item_row['hashtags'] = $tags['hashtags'];
$item_row['mentions'] = $tags['mentions'];
$item_row['attachments'] = Post\Media::splitAttachments($item_row['uri-id']);
$item_row['attachments'] = DI::postMediaRepository()->splitAttachments($item_row['uri-id']);
return $item_row;
}

View file

@ -15,7 +15,7 @@ msgstr ""
"POT-Creation-Date: 2022-05-11 08:54-0400\n"
"PO-Revision-Date: 2018-05-24 06:41+0000\n"
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2022\n"
"Language-Team: German (https://www.transifex.com/Friendica/teams/12172/de/)\n"
"Language-Team: German (https://app.transifex.com/Friendica/teams/12172/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -3,60 +3,63 @@
# This file is distributed under the same license as the Friendica advancedcontentfilter addon package.
#
#
# Translators:
# fabrixxm <fabrix.xm@gmail.com>, 2018
# Sylke Vicious <silkevicious@gmail.com>, 2021
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-04-17 04:04+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: fabrixxm <fabrix.xm@gmail.com>, 2018\n"
"Language-Team: Italian (https://www.transifex.com/Friendica/teams/12172/it/)\n"
"POT-Creation-Date: 2022-05-11 08:54-0400\n"
"PO-Revision-Date: 2018-05-24 06:41+0000\n"
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>, 2021\n"
"Language-Team: Italian (https://app.transifex.com/Friendica/teams/12172/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
#: advancedcontentfilter.php:134
#: advancedcontentfilter.php:154
#, php-format
msgid "Filtered by rule: %s"
msgstr "Filtrato dalla regola: %s"
#: advancedcontentfilter.php:147 advancedcontentfilter.php:204
#: advancedcontentfilter.php:170 advancedcontentfilter.php:225
msgid "Advanced Content Filter"
msgstr "Filtro Avanzato Contenuti"
#: advancedcontentfilter.php:203
#: advancedcontentfilter.php:224
msgid "Back to Addon Settings"
msgstr "Torna alle impostazioni del componente aggiuntivo"
#: advancedcontentfilter.php:205
#: advancedcontentfilter.php:226
msgid "Add a Rule"
msgstr "Aggiungi una regola"
#: advancedcontentfilter.php:206
#: advancedcontentfilter.php:227
msgid "Help"
msgstr "Aiuto"
#: advancedcontentfilter.php:207
#: advancedcontentfilter.php:228
msgid ""
"Add and manage your personal content filter rules in this screen. Rules have"
" a name and an arbitrary expression that will be matched against post data. "
"For a complete reference of the available operations and variables, check "
"the <a href=\"advancedcontentfilter/help\">help page</a>."
"the help page."
msgstr ""
"Aggiungi e gestisci le tue regole personali di filtro contenuti in questa "
"schermata. Le regole hanno un nome e un'espressione arbitraria che sarà "
"confrontata con i dati del messaggio. Per un elenco completo delle "
"operazioni disponibili, controlla la <a "
"href=\"advancedcontentfilter/help\">pagina di aiuto</a>."
"operazioni e variabili disponibili, controlla la pagina di aiuto."
#: advancedcontentfilter.php:208
#: advancedcontentfilter.php:229
msgid "Your rules"
msgstr "Le tue regole"
#: advancedcontentfilter.php:209
#: advancedcontentfilter.php:230
msgid ""
"You have no rules yet! Start adding one by clicking on the button above next"
" to the title."
@ -64,110 +67,106 @@ msgstr ""
"Non hai ancora nessuna regola! Aggiungine una cliccando sul bottone qui "
"sopra a fianco al titolo."
#: advancedcontentfilter.php:210
#: advancedcontentfilter.php:231
msgid "Disabled"
msgstr "Disabilitato"
#: advancedcontentfilter.php:211
#: advancedcontentfilter.php:232
msgid "Enabled"
msgstr "Abilitato"
#: advancedcontentfilter.php:212
#: advancedcontentfilter.php:233
msgid "Disable this rule"
msgstr "Diabilita questa regola"
#: advancedcontentfilter.php:213
#: advancedcontentfilter.php:234
msgid "Enable this rule"
msgstr "Abilita questa regola"
#: advancedcontentfilter.php:214
#: advancedcontentfilter.php:235
msgid "Edit this rule"
msgstr "Modifica questa regola"
#: advancedcontentfilter.php:215
#: advancedcontentfilter.php:236
msgid "Edit the rule"
msgstr "Modifica la regola"
#: advancedcontentfilter.php:216
#: advancedcontentfilter.php:237
msgid "Save this rule"
msgstr "Salva questa regola"
#: advancedcontentfilter.php:217
#: advancedcontentfilter.php:238
msgid "Delete this rule"
msgstr "Elimina questa regola"
#: advancedcontentfilter.php:218
#: advancedcontentfilter.php:239
msgid "Rule"
msgstr "Regola"
#: advancedcontentfilter.php:219
#: advancedcontentfilter.php:240
msgid "Close"
msgstr "Chiudi"
#: advancedcontentfilter.php:220
#: advancedcontentfilter.php:241
msgid "Add new rule"
msgstr "Aggiungi nuova regola"
#: advancedcontentfilter.php:221
#: advancedcontentfilter.php:242
msgid "Rule Name"
msgstr "Nome Regola"
#: advancedcontentfilter.php:222
#: advancedcontentfilter.php:243
msgid "Rule Expression"
msgstr "Espressione Regola"
#: advancedcontentfilter.php:223
msgid ""
"<p>Examples:</p><ul><li><pre>author_link == "
"'https://friendica.mrpetovan.com/profile/hypolite'</pre></li><li>tags</li></ul>"
msgstr ""
"<p>Esempi:</p><ul><li><pre>author_link == "
"'https://friendica.mrpetovan.com/profile/hypolite'</pre></li><li>tags</li></ul>"
#: advancedcontentfilter.php:224
#: advancedcontentfilter.php:244
msgid "Cancel"
msgstr "Annulla"
#: advancedcontentfilter.php:290 advancedcontentfilter.php:301
#: advancedcontentfilter.php:312 advancedcontentfilter.php:346
#: advancedcontentfilter.php:375 advancedcontentfilter.php:396
#: advancedcontentfilter.php:295
msgid "This addon requires this node having at least one post"
msgstr ""
#: advancedcontentfilter.php:325 advancedcontentfilter.php:336
#: advancedcontentfilter.php:347 advancedcontentfilter.php:383
#: advancedcontentfilter.php:414 advancedcontentfilter.php:437
msgid "You must be logged in to use this method"
msgstr "Devi essere autenticato per usare questo metodo"
#: advancedcontentfilter.php:316 advancedcontentfilter.php:350
#: advancedcontentfilter.php:379
#: advancedcontentfilter.php:351 advancedcontentfilter.php:387
#: advancedcontentfilter.php:418
msgid "Invalid form security token, please refresh the page."
msgstr "Token di sicurezza invalido, aggiorna la pagina."
#: advancedcontentfilter.php:328
#: advancedcontentfilter.php:363
msgid "The rule name and expression are required."
msgstr "Il nome e l'espressione della regola sono richiesti."
#: advancedcontentfilter.php:340
#: advancedcontentfilter.php:377
msgid "Rule successfully added"
msgstr "Regola aggiunta con successo"
#: advancedcontentfilter.php:354 advancedcontentfilter.php:383
#: advancedcontentfilter.php:391 advancedcontentfilter.php:422
msgid "Rule doesn't exist or doesn't belong to you."
msgstr "La regola non esiste o non ti appartiene."
#: advancedcontentfilter.php:369
#: advancedcontentfilter.php:408
msgid "Rule successfully updated"
msgstr "Regola aggiornata con successo"
#: advancedcontentfilter.php:390
#: advancedcontentfilter.php:431
msgid "Rule successfully deleted"
msgstr "Regola eliminata con successo"
#: advancedcontentfilter.php:400
#: advancedcontentfilter.php:441
msgid "Missing argument: guid."
msgstr "Argomento mancante: guid."
#: advancedcontentfilter.php:406
#: advancedcontentfilter.php:449
#, php-format
msgid "Unknown post with guid: %s"
msgstr "Messaggio con guid %s sconosciuto"
#: src/middlewares.php:28
#: src/middlewares.php:49
msgid "Method not found"
msgstr "Metodo non trovato"

View file

@ -3,14 +3,14 @@
if(! function_exists("string_plural_select_it")) {
function string_plural_select_it($n){
$n = intval($n);
return intval($n != 1);
if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; }
}}
$a->strings['Filtered by rule: %s'] = 'Filtrato dalla regola: %s';
$a->strings['Advanced Content Filter'] = 'Filtro Avanzato Contenuti';
$a->strings['Back to Addon Settings'] = 'Torna alle impostazioni del componente aggiuntivo';
$a->strings['Add a Rule'] = 'Aggiungi una regola';
$a->strings['Help'] = 'Aiuto';
$a->strings['Add and manage your personal content filter rules in this screen. Rules have a name and an arbitrary expression that will be matched against post data. For a complete reference of the available operations and variables, check the <a href="advancedcontentfilter/help">help page</a>.'] = 'Aggiungi e gestisci le tue regole personali di filtro contenuti in questa schermata. Le regole hanno un nome e un\'espressione arbitraria che sarà confrontata con i dati del messaggio. Per un elenco completo delle operazioni disponibili, controlla la <a href="advancedcontentfilter/help">pagina di aiuto</a>.';
$a->strings['Add and manage your personal content filter rules in this screen. Rules have a name and an arbitrary expression that will be matched against post data. For a complete reference of the available operations and variables, check the help page.'] = 'Aggiungi e gestisci le tue regole personali di filtro contenuti in questa schermata. Le regole hanno un nome e un\'espressione arbitraria che sarà confrontata con i dati del messaggio. Per un elenco completo delle operazioni e variabili disponibili, controlla la pagina di aiuto.';
$a->strings['Your rules'] = 'Le tue regole';
$a->strings['You have no rules yet! Start adding one by clicking on the button above next to the title.'] = 'Non hai ancora nessuna regola! Aggiungine una cliccando sul bottone qui sopra a fianco al titolo.';
$a->strings['Disabled'] = 'Disabilitato';
@ -26,7 +26,6 @@ $a->strings['Close'] = 'Chiudi';
$a->strings['Add new rule'] = 'Aggiungi nuova regola';
$a->strings['Rule Name'] = 'Nome Regola';
$a->strings['Rule Expression'] = 'Espressione Regola';
$a->strings['<p>Examples:</p><ul><li><pre>author_link == \'https://friendica.mrpetovan.com/profile/hypolite\'</pre></li><li>tags</li></ul>'] = '<p>Esempi:</p><ul><li><pre>author_link == \'https://friendica.mrpetovan.com/profile/hypolite\'</pre></li><li>tags</li></ul>';
$a->strings['Cancel'] = 'Annulla';
$a->strings['You must be logged in to use this method'] = 'Devi essere autenticato per usare questo metodo';
$a->strings['Invalid form security token, please refresh the page.'] = 'Token di sicurezza invalido, aggiorna la pagina.';

6
audon/README.md Normal file
View file

@ -0,0 +1,6 @@
Audon Addon
=============
This is a quick and dirty addon to add a [Audon][1] website as an app. This Addon based on webrtc. Audon is a service of realtime audio chat
[1]: https://codeberg.org/nmkj/audon

69
audon/audon.php Normal file
View file

@ -0,0 +1,69 @@
<?php
/*
* Name: Audon Application
* Description: add a Audon instance. Based on webRTC Addon
* Version: 0.1
* Author: Stephen Mahood <https://friends.mayfirst.org/profile/marxistvegan>
* Author: Tobias Diekershoff <https://f.diekershoff.de/profile/tobias>
* Author: Matthias Ebers <https://loma.ml/profile/feb>
*/
use Friendica\Core\Hook;
use Friendica\Core\Renderer;
use Friendica\DI;
function audon_install()
{
Hook::register('app_menu', __FILE__, 'audon_app_menu');
}
function audon_app_menu(array &$b)
{
$b['app_menu'][] = '<div class="app-title"><a href="audon">' . DI::l10n()->t('Audon Audiochat') . '</a></div>';
}
function audon_addon_admin(string &$o)
{
$t = Renderer::getMarkupTemplate('admin.tpl', 'addon/audon/');
$o = Renderer::replaceMacros($t, [
'$submit' => DI::l10n()->t('Save Settings'),
'$audonurl' => [
'audonurl',
DI::l10n()->t('Audon Base URL'),
DI::config()->get('audon','audonurl'),
DI::l10n()->t('Page your users will create an Audon audio chat room on. For example you could use https://audon.space.'),
],
]);
}
function audon_addon_admin_post()
{
DI::config()->set('audon', 'audonurl', trim($_POST['audonurl'] ?? ''));
}
/**
* This is a statement rather than an actual function definition. The simple
* existence of this method is checked to figure out if the addon offers a
* module.
*/
function audon_module() {}
function audon_content(): string
{
$o = '';
/* landingpage to create chatrooms */
$audonurl = DI::config()->get('audon', 'audonurl');
/* embedd the landing page in an iframe */
$o .= '<h2>' . DI::l10n()->t('Audio Chat') . '</h2>';
$o .= '<p>' . DI::l10n()->t('Audon is an audio conferencing tool. Connect your account to Audon and create a room. Share the generated link to talk to other participants.') . '</p>';
if ($audonurl == '') {
$o .= '<p>' . DI::l10n()->t('Please contact your Friendica administrator to remind them to configure the Audon addon.') . '</p>';
} else {
$o .= '<iframe src="' . $audonurl . '" width="740px" height="600px"></iframe>';
}
return $o;
}

52
audon/lang/C/messages.po Normal file
View file

@ -0,0 +1,52 @@
# ADDON audon
# Copyright (C)
# This file is distributed under the same license as the Friendica audon addon package.
#
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-08-18 18:23+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: audon.php:22
msgid "Audon Audiochat"
msgstr ""
#: audon.php:29
msgid "Save Settings"
msgstr ""
#: audon.php:32
msgid "Audon Base URL"
msgstr ""
#: audon.php:34
msgid ""
"Page your users will create an Audon audio chat room on. For example you "
"could use https://audon.space."
msgstr ""
#: audon.php:60
msgid "Audio Chat"
msgstr ""
#: audon.php:61
msgid ""
"Audon is an audio conferencing tool. Connect your account to Audon and "
"create a room. Share the generated link to talk to other participants."
msgstr ""
#: audon.php:63
msgid ""
"Please contact your Friendica administrator to remind them to configure the "
"Audon addon."
msgstr ""

View file

@ -0,0 +1,2 @@
{{include file="field_input.tpl" field=$audonurl}}
<button type="submit">{{$submit}}</button>

View file

@ -69,7 +69,7 @@ function birdavatar_addon_settings_post(&$s)
}
if (!empty($_POST['birdavatar-usebird'])) {
$url = DI::baseUrl()->get() . '/birdavatar/' . DI::userSession()->getLocalUserId() . '?ts=' . time();
$url = DI::baseUrl() . '/birdavatar/' . DI::userSession()->getLocalUserId() . '?ts=' . time();
$self = DBA::selectFirst('contact', ['id'], ['uid' => DI::userSession()->getLocalUserId(), 'self' => true]);
if (!DBA::isResult($self)) {
@ -120,9 +120,9 @@ function birdavatar_lookup(array &$b)
{
$user = DBA::selectFirst('user', ['uid'], ['email' => $b['email']]);
if (DBA::isResult($user)) {
$url = DI::baseUrl()->get() . '/birdavatar/' . $user['uid'];
$url = DI::baseUrl() . '/birdavatar/' . $user['uid'];
} else {
$url = DI::baseUrl()->get() . '/birdavatar/' . md5(trim(strtolower($b['email'])));
$url = DI::baseUrl() . '/birdavatar/' . md5(trim(strtolower($b['email'])));
}
switch ($b['size']) {

View file

@ -12,9 +12,9 @@ msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
"PO-Revision-Date: 2021-05-23 19:26+0000\n"
"Last-Translator: Till Mohr <tmtrfx@till-mohr.de>\n"
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
"PO-Revision-Date: 2014-06-22 11:19+0000\n"
"Last-Translator: Till Mohr <tmtrfx@till-mohr.de>, 2021\n"
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -8,9 +8,7 @@
*
*/
use Friendica\App;
use Friendica\Core\Hook;
use Friendica\Core\System;
use Friendica\DI;
use Jaybizzle\CrawlerDetect\CrawlerDetect;
use Friendica\Core\Logger;
@ -52,12 +50,15 @@ function blockbot_init_1()
$logdata = ['agent' => $_SERVER['HTTP_USER_AGENT'], 'uri' => $_SERVER['REQUEST_URI']];
// List of "good" crawlers
$good_agents = ['fediverse.space crawler', 'fediverse.network crawler', 'Active_Pods_CheckBot_3.0',
$good_agents = [
'fediverse.space crawler', 'fediverse.network crawler', 'Active_Pods_CheckBot_3.0',
'Social-Relay/', 'Test Certificate Info', 'Uptimebot/', 'GNUSocialBot', 'UptimeRobot/',
'PTST/', 'Zabbix', 'Poduptime/'];
'PTST/', 'Zabbix', 'Poduptime/'
];
// List of known crawlers.
$agents = ['SemrushBot', 's~feedly-nikon3', 'Qwantify/Bleriot/', 'ltx71', 'Sogou web spider/',
$agents = [
'SemrushBot', 's~feedly-nikon3', 'Qwantify/Bleriot/', 'ltx71', 'Sogou web spider/',
'Diffbot/', 'Twitterbot/', 'YisouSpider', 'evc-batch/', 'LivelapBot/', 'TrendsmapResolver/',
'PaperLiBot/', 'Nuzzel', 'um-LN/', 'Google Favicon', 'Datanyze', 'BLEXBot/', '360Spider',
'adscanner/', 'HeadlessChrome', 'wpif', 'startmebot/', 'Googlebot/', 'Applebot/',
@ -79,7 +80,8 @@ function blockbot_init_1()
'Google-Apps-Script; beanserver;', 'woorankreview/', 'Seekport Crawler;', 'AHC/',
'SkypeUriPreview Preview/', 'Semanticbot/', 'Embed PHP library', 'XoviOnpageCrawler;',
'GetHPinfo.com-Bot/', 'BoardReader Favicon Fetcher', 'Google-Adwords-Instant', 'newspaper/',
'YurichevBot/', 'Crawling at Home Project', 'InfoTigerBot/'];
'YurichevBot/', 'Crawling at Home Project', 'InfoTigerBot/'
];
if (!DI::config()->get('blockbot', 'good_crawlers')) {
$agents = array_merge($agents, $good_agents);
@ -114,7 +116,8 @@ function blockbot_init_1()
}
// List of false positives' strings of known "good" agents.
$agents = ['curl', 'zgrab', 'Go-http-client', 'curb', 'github.com', 'reqwest', 'Feedly/',
$agents = [
'curl', 'zgrab', 'Go-http-client', 'curb', 'github.com', 'reqwest', 'Feedly/',
'Python-urllib/', 'Liferea/', 'aiohttp/', 'WordPress.com Reader', 'hackney/',
'Faraday v', 'okhttp', 'UniversalFeedParser', 'PixelFedBot', 'python-requests',
'WordPress/', 'http.rb/', 'Apache-HttpClient/', 'WordPress.com;', 'Pleroma',
@ -122,7 +125,8 @@ function blockbot_init_1()
'lua-resty-http/', 'Tiny Tiny RSS/', 'Wget/', 'PostmanRuntime/',
'W3C_Validator/', 'NetNewsWire', 'FeedValidator/', 'theoldreader.com', 'axios/',
'Paw/', 'PeerTube/', 'fedi.inex.dev', 'FediDB/', 'index.community crawler',
'Slackbot-LinkExpanding'];
'Slackbot-LinkExpanding'
];
if (DI::config()->get('blockbot', 'good_crawlers')) {
$agents = array_merge($agents, $good_agents);
@ -130,11 +134,11 @@ function blockbot_init_1()
foreach ($agents as $agent) {
if (stristr($_SERVER['HTTP_USER_AGENT'], $agent)) {
logger::notice('False positive', $logdata);
logger::info('False positive', $logdata);
return;
}
}
logger::info('Blocked bot', $logdata);
logger::notice('Blocked bot', $logdata);
throw new ForbiddenException('Bots are not allowed');
}

View file

@ -1,230 +0,0 @@
<?php
/**
* Name: blockem
* Description: Allows users to hide content by collapsing posts and replies.
* Version: 1.0
* Author: Mike Macgirvin <http://macgirvin.com/profile/mike>
* Author: Roland Haeder <https://f.haeder.net/roland>
* Status: unsupported
*/
use Friendica\App;
use Friendica\Core\Hook;
use Friendica\Core\Renderer;
use Friendica\DI;
use Friendica\Util\Strings;
global $blockem_words;
function blockem_install()
{
Hook::register('prepare_body_content_filter', 'addon/blockem/blockem.php', 'blockem_prepare_body_content_filter');
Hook::register('display_item' , 'addon/blockem/blockem.php', 'blockem_display_item');
Hook::register('addon_settings' , 'addon/blockem/blockem.php', 'blockem_addon_settings');
Hook::register('addon_settings_post' , 'addon/blockem/blockem.php', 'blockem_addon_settings_post');
Hook::register('conversation_start' , 'addon/blockem/blockem.php', 'blockem_conversation_start');
Hook::register('item_photo_menu' , 'addon/blockem/blockem.php', 'blockem_item_photo_menu');
Hook::register('enotify_store' , 'addon/blockem/blockem.php', 'blockem_enotify_store');
}
function blockem_addon_settings(array &$data)
{
if (!DI::userSession()->getLocalUserId()) {
return;
}
$words = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'blockem', 'words', '');
$t = Renderer::getMarkupTemplate('settings.tpl', 'addon/blockem/');
$html = Renderer::replaceMacros($t, [
'$info' => DI::l10n()->t("Hides user's content by collapsing posts. Also replaces their avatar with generic image."),
'$words' => ['blockem-words', DI::l10n()->t('Comma separated profile URLS:'), $words],
]);
$data = [
'addon' => 'blockem',
'title' => DI::l10n()->t('Blockem'),
'html' => $html,
];
}
function blockem_addon_settings_post(array &$b)
{
if (!DI::userSession()->getLocalUserId()) {
return;
}
if (!empty($_POST['blockem-submit'])) {
DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'blockem', 'words', trim($_POST['blockem-words']));
}
}
function blockem_enotify_store(array &$b)
{
$words = DI::pConfig()->get($b['uid'], 'blockem', 'words');
if ($words) {
$arr = explode(',', $words);
} else {
return;
}
$found = false;
if (count($arr)) {
foreach ($arr as $word) {
if (!strlen(trim($word))) {
continue;
}
if (Strings::compareLink($b['url'], $word)) {
$found = true;
break;
}
}
}
if ($found) {
// empty out the fields
$b = [];
}
}
function blockem_prepare_body_content_filter(array &$hook_data)
{
if (!DI::userSession()->getLocalUserId()) {
return;
}
$profiles_string = null;
if (DI::userSession()->getLocalUserId()) {
$profiles_string = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'blockem', 'words');
}
if ($profiles_string) {
$profiles_array = explode(',', $profiles_string);
} else {
return;
}
$found = false;
foreach ($profiles_array as $word) {
if (Strings::compareLink($hook_data['item']['author-link'], trim($word))) {
$found = true;
break;
}
}
if ($found) {
$hook_data['filter_reasons'][] = DI::l10n()->t('Filtered user: %s', $hook_data['item']['author-name']);
}
}
function blockem_display_item(array &$b = null)
{
if (!empty($b['output']['body']) && strstr($b['output']['body'], 'id="blockem-wrap-')) {
$b['output']['thumb'] = DI::baseUrl()->get() . "/images/person-80.jpg";
}
}
function blockem_conversation_start(array &$b)
{
global $blockem_words;
if (!DI::userSession()->getLocalUserId()) {
return;
}
$words = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'blockem', 'words');
if ($words) {
$blockem_words = explode(',', $words);
}
DI::page()['htmlhead'] .= <<< EOT
<script>
function blockemBlock(author) {
$.get('blockem?block=' +author, function(data) {
location.reload(true);
});
}
function blockemUnblock(author) {
$.get('blockem?unblock=' +author, function(data) {
location.reload(true);
});
}
</script>
EOT;
}
function blockem_item_photo_menu(array &$b)
{
global $blockem_words;
if (!DI::userSession()->getLocalUserId() || $b['item']['self']) {
return;
}
$blocked = false;
$author = $b['item']['author-link'];
if (!empty($blockem_words)) {
foreach($blockem_words as $bloke) {
if (Strings::compareLink($bloke,$author)) {
$blocked = true;
break;
}
}
}
if ($blocked) {
$b['menu'][DI::l10n()->t('Unblock Author')] = 'javascript:blockemUnblock(\'' . $author . '\');';
} else {
$b['menu'][DI::l10n()->t('Block Author')] = 'javascript:blockemBlock(\'' . $author . '\');';
}
}
/**
* This is a statement rather than an actual function definition. The simple
* existence of this method is checked to figure out if the addon offers a
* module.
*/
function blockem_module() {}
function blockem_init()
{
if (!DI::userSession()->getLocalUserId()) {
return;
}
$words = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'blockem', 'words');
if (array_key_exists('block', $_GET) && $_GET['block']) {
if (strlen($words)) {
$words .= ',';
}
$words .= trim($_GET['block']);
}
if (array_key_exists('unblock', $_GET) && $_GET['unblock']) {
$arr = explode(',',$words);
$newarr = [];
if (count($arr)) {
foreach ($arr as $x) {
if (!Strings::compareLink(trim($x), trim($_GET['unblock']))) {
$newarr[] = $x;
}
}
}
$words = implode(',', $newarr);
}
DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'blockem', 'words', $words);
exit();
}

View file

@ -1,45 +0,0 @@
# ADDON blockem
# Copyright (C)
# This file is distributed under the same license as the Friendica blockem addon package.
#
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-11-21 19:13-0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: blockem.php:39
msgid ""
"Hides user's content by collapsing posts. Also replaces their avatar with "
"generic image."
msgstr ""
#: blockem.php:40
msgid "Comma separated profile URLS:"
msgstr ""
#: blockem.php:45
msgid "Blockem"
msgstr ""
#: blockem.php:120
#, php-format
msgid "Filtered user: %s"
msgstr ""
#: blockem.php:183
msgid "Unblock Author"
msgstr ""
#: blockem.php:185
msgid "Block Author"
msgstr ""

View file

@ -1,52 +0,0 @@
# ADDON blockem
# Copyright (C)
# This file is distributed under the same license as the Friendica blockem addon package.
#
#
# Translators:
# abidin toumi <abidin24@tutanota.com>, 2021
# Farida Khalaf <faridakhalaf@hotmail.com>, 2021
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
"PO-Revision-Date: 2021-10-29 08:15+0000\n"
"Last-Translator: abidin toumi <abidin24@tutanota.com>\n"
"Language-Team: Arabic (http://www.transifex.com/Friendica/friendica/language/ar/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ar\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
#: blockem.php:42 blockem.php:46
msgid "Blockem"
msgstr "احجبه<br>"
#: blockem.php:50
msgid ""
"Hides user's content by collapsing posts. Also replaces their avatar with "
"generic image."
msgstr "إخفاء محتوى المستخدم عن طريق تصغير المشاركات. و استبدال الصورة الرمزية الخاصة بهم بصورة عامة."
#: blockem.php:51
msgid "Comma separated profile URLS:"
msgstr "عناوين الملفات الشخصية مفصولة بفواصل:"
#: blockem.php:55
msgid "Save Settings"
msgstr "احفظ الإعدادات"
#: blockem.php:131
#, php-format
msgid "Filtered user: %s"
msgstr "ترشيح المستخدم :1%s"
#: blockem.php:190
msgid "Unblock Author"
msgstr "ألغ الحجب عن المدون"
#: blockem.php:192
msgid "Block Author"
msgstr "احجب المدون"

View file

@ -1,14 +0,0 @@
<?php
if(! function_exists("string_plural_select_ar")) {
function string_plural_select_ar($n){
$n = intval($n);
if ($n==0) { return 0; } else if ($n==1) { return 1; } else if ($n==2) { return 2; } else if ($n%100>=3 && $n%100<=10) { return 3; } else if ($n%100>=11 && $n%100<=99) { return 4; } else { return 5; }
}}
$a->strings['Blockem'] = 'احجبه<br>';
$a->strings['Hides user\'s content by collapsing posts. Also replaces their avatar with generic image.'] = 'إخفاء محتوى المستخدم عن طريق تصغير المشاركات. و استبدال الصورة الرمزية الخاصة بهم بصورة عامة.';
$a->strings['Comma separated profile URLS:'] = 'عناوين الملفات الشخصية مفصولة بفواصل:';
$a->strings['Save Settings'] = 'احفظ الإعدادات';
$a->strings['Filtered user: %s'] = 'ترشيح المستخدم :1%s';
$a->strings['Unblock Author'] = 'ألغ الحجب عن المدون';
$a->strings['Block Author'] = 'احجب المدون';

View file

@ -1,59 +0,0 @@
# ADDON blockem
# Copyright (C)
# This file is distributed under the same license as the Friendica blockem addon package.
#
#
# Translators:
# Joan Bar <friendica@tutanota.com>, 2019
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-08-17 10:23+0200\n"
"PO-Revision-Date: 2019-10-14 11:50+0000\n"
"Last-Translator: Joan Bar <friendica@tutanota.com>\n"
"Language-Team: Catalan (http://www.transifex.com/Friendica/friendica/language/ca/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ca\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: blockem.php:54 blockem.php:58
msgid "Blockem"
msgstr "Blockem"
#: blockem.php:62
msgid ""
"Hides user's content by collapsing posts. Also replaces their avatar with "
"generic image."
msgstr "Amaga el contingut de l'usuari mitjançant la publicació col·lapsada. També substitueix el seu avatar per una imatge genèrica"
#: blockem.php:63
msgid "Comma separated profile URLS:"
msgstr "URL de perfil separats per comes:"
#: blockem.php:67
msgid "Save Settings"
msgstr "Desa la configuració"
#: blockem.php:81
msgid "BLOCKEM Settings saved."
msgstr "S'ha desat la configuració de BLOCKEM."
#: blockem.php:143
#, php-format
msgid "Filtered user: %s"
msgstr "Usuari filtrat:%s"
#: blockem.php:202
msgid "Unblock Author"
msgstr "Desbloca l'autor"
#: blockem.php:204
msgid "Block Author"
msgstr "Autor de bloc"
#: blockem.php:244
msgid "blockem settings updated"
msgstr "S'ha actualitzat la configuració de blockem"

View file

@ -1,16 +0,0 @@
<?php
if(! function_exists("string_plural_select_ca")) {
function string_plural_select_ca($n){
$n = intval($n);
return intval($n != 1);
}}
$a->strings['Blockem'] = 'Blockem';
$a->strings['Hides user\'s content by collapsing posts. Also replaces their avatar with generic image.'] = 'Amaga el contingut de l\'usuari mitjançant la publicació col·lapsada. També substitueix el seu avatar per una imatge genèrica';
$a->strings['Comma separated profile URLS:'] = 'URL de perfil separats per comes:';
$a->strings['Save Settings'] = 'Desa la configuració';
$a->strings['BLOCKEM Settings saved.'] = 'S\'ha desat la configuració de BLOCKEM.';
$a->strings['Filtered user: %s'] = 'Usuari filtrat:%s';
$a->strings['Unblock Author'] = 'Desbloca l\'autor';
$a->strings['Block Author'] = 'Autor de bloc';
$a->strings['blockem settings updated'] = 'S\'ha actualitzat la configuració de blockem';

View file

@ -1,60 +0,0 @@
# ADDON blockem
# Copyright (C)
# This file is distributed under the same license as the Friendica blockem addon package.
#
#
# Translators:
# Aditoo, 2018
# michal_s <msupler@gmail.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-08-17 10:23+0200\n"
"PO-Revision-Date: 2018-08-18 12:25+0000\n"
"Last-Translator: Aditoo\n"
"Language-Team: Czech (http://www.transifex.com/Friendica/friendica/language/cs/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: cs\n"
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
#: blockem.php:54 blockem.php:58
msgid "Blockem"
msgstr "Blockem"
#: blockem.php:62
msgid ""
"Hides user's content by collapsing posts. Also replaces their avatar with "
"generic image."
msgstr "Skrývá uživatelský obsah zabalením příspěvků. Navíc nahrazuje avatar generickým obrázkem."
#: blockem.php:63
msgid "Comma separated profile URLS:"
msgstr "URL adresy profilů, oddělené čárkami:"
#: blockem.php:67
msgid "Save Settings"
msgstr "Uložit nastavení"
#: blockem.php:81
msgid "BLOCKEM Settings saved."
msgstr "Nastavení BLOCKEM uložena."
#: blockem.php:143
#, php-format
msgid "Filtered user: %s"
msgstr "Filtrovaný uživatel: %s"
#: blockem.php:202
msgid "Unblock Author"
msgstr "Odblokovat autora"
#: blockem.php:204
msgid "Block Author"
msgstr "Zablokovat autora"
#: blockem.php:244
msgid "blockem settings updated"
msgstr "nastavení blockem aktualizována"

View file

@ -1,16 +0,0 @@
<?php
if(! function_exists("string_plural_select_cs")) {
function string_plural_select_cs($n){
$n = intval($n);
if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; }
}}
$a->strings['Blockem'] = 'Blockem';
$a->strings['Hides user\'s content by collapsing posts. Also replaces their avatar with generic image.'] = 'Skrývá uživatelský obsah zabalením příspěvků. Navíc nahrazuje avatar generickým obrázkem.';
$a->strings['Comma separated profile URLS:'] = 'URL adresy profilů, oddělené čárkami:';
$a->strings['Save Settings'] = 'Uložit nastavení';
$a->strings['BLOCKEM Settings saved.'] = 'Nastavení BLOCKEM uložena.';
$a->strings['Filtered user: %s'] = 'Filtrovaný uživatel: %s';
$a->strings['Unblock Author'] = 'Odblokovat autora';
$a->strings['Block Author'] = 'Zablokovat autora';
$a->strings['blockem settings updated'] = 'nastavení blockem aktualizována';

View file

@ -1,47 +0,0 @@
# ADDON blockem
# Copyright (C)
# This file is distributed under the same license as the Friendica blockem addon package.
#
#
# Translators:
# Anton <dev@atjn.dk>, 2022
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-11-21 19:13-0500\n"
"PO-Revision-Date: 2014-06-22 11:20+0000\n"
"Last-Translator: Anton <dev@atjn.dk>, 2022\n"
"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: da_DK\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: blockem.php:39
msgid ""
"Hides user's content by collapsing posts. Also replaces their avatar with "
"generic image."
msgstr "Skjul brugers indhold ved at kollapse deres opslag. Erstatter også deres avatar med et generisk billede."
#: blockem.php:40
msgid "Comma separated profile URLS:"
msgstr "Kommasepareret liste over profil-URL's:"
#: blockem.php:45
msgid "Blockem"
msgstr "Blokdem"
#: blockem.php:120
#, php-format
msgid "Filtered user: %s"
msgstr "Filtreret bruger: %s"
#: blockem.php:183
msgid "Unblock Author"
msgstr "Fjern blokering af forfatter"
#: blockem.php:185
msgid "Block Author"
msgstr "Blokér forfatter"

View file

@ -1,13 +0,0 @@
<?php
if(! function_exists("string_plural_select_da_dk")) {
function string_plural_select_da_dk($n){
$n = intval($n);
return intval($n != 1);
}}
$a->strings['Hides user\'s content by collapsing posts. Also replaces their avatar with generic image.'] = 'Skjul brugers indhold ved at kollapse deres opslag. Erstatter også deres avatar med et generisk billede.';
$a->strings['Comma separated profile URLS:'] = 'Kommasepareret liste over profil-URL\'s:';
$a->strings['Blockem'] = 'Blokdem';
$a->strings['Filtered user: %s'] = 'Filtreret bruger: %s';
$a->strings['Unblock Author'] = 'Fjern blokering af forfatter';
$a->strings['Block Author'] = 'Blokér forfatter';

View file

@ -1,50 +0,0 @@
# ADDON blockem
# Copyright (C)
# This file is distributed under the same license as the Friendica blockem addon package.
#
#
# Translators:
# Andreas H., 2018
# Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2014
# Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2018
# Ulf Rompe <transifex.com@rompe.org>, 2019
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-11-21 19:13-0500\n"
"PO-Revision-Date: 2021-12-22 15:27+0000\n"
"Last-Translator: Transifex Bot <>\n"
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: blockem.php:39
msgid ""
"Hides user's content by collapsing posts. Also replaces their avatar with "
"generic image."
msgstr "Verbirgt Inhalte von Benutzern durch Zusammenklappen der Beiträge. Des Weiteren wird das Profilbild durch einen generischen Avatar ersetzt."
#: blockem.php:40
msgid "Comma separated profile URLS:"
msgstr "Komma-separierte Liste von Profil-URLs"
#: blockem.php:45
msgid "Blockem"
msgstr "Blockem"
#: blockem.php:120
#, php-format
msgid "Filtered user: %s"
msgstr "Gefilterte Person: %s"
#: blockem.php:183
msgid "Unblock Author"
msgstr "Autor freischalten"
#: blockem.php:185
msgid "Block Author"
msgstr "Autor blockieren"

View file

@ -1,13 +0,0 @@
<?php
if(! function_exists("string_plural_select_de")) {
function string_plural_select_de($n){
$n = intval($n);
return intval($n != 1);
}}
$a->strings['Hides user\'s content by collapsing posts. Also replaces their avatar with generic image.'] = 'Verbirgt Inhalte von Benutzern durch Zusammenklappen der Beiträge. Des Weiteren wird das Profilbild durch einen generischen Avatar ersetzt.';
$a->strings['Comma separated profile URLS:'] = 'Komma-separierte Liste von Profil-URLs';
$a->strings['Blockem'] = 'Blockem';
$a->strings['Filtered user: %s'] = 'Gefilterte Person: %s';
$a->strings['Unblock Author'] = 'Autor freischalten';
$a->strings['Block Author'] = 'Autor blockieren';

View file

@ -1,59 +0,0 @@
# ADDON blockem
# Copyright (C)
# This file is distributed under the same license as the Friendica blockem addon package.
#
#
# Translators:
# Andy H3 <andy@hubup.pro>, 2018
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-02-09 13:00+0100\n"
"PO-Revision-Date: 2018-03-15 14:10+0000\n"
"Last-Translator: Andy H3 <andy@hubup.pro>\n"
"Language-Team: English (United Kingdom) (http://www.transifex.com/Friendica/friendica/language/en_GB/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: en_GB\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: blockem.php:51 blockem.php:55
msgid "\"Blockem\""
msgstr "\"Blockem\""
#: blockem.php:59
msgid ""
"Hides user's content by collapsing posts. Also replaces their avatar with "
"generic image."
msgstr "Hides user's content by collapsing posts. Also replaces their avatar with generic image."
#: blockem.php:60
msgid "Comma separated profile URLS:"
msgstr "Comma separated profile URLs:"
#: blockem.php:64
msgid "Save Settings"
msgstr "Save settings"
#: blockem.php:77
msgid "BLOCKEM Settings saved."
msgstr "Blockem settings saved."
#: blockem.php:140
#, php-format
msgid "Hidden content by %s - Click to open/close"
msgstr "Hidden content by %s - Reveal/hide"
#: blockem.php:193
msgid "Unblock Author"
msgstr "Unblock author"
#: blockem.php:195
msgid "Block Author"
msgstr "Block author"
#: blockem.php:227
msgid "blockem settings updated"
msgstr "Blockem settings updated"

View file

@ -1,16 +0,0 @@
<?php
if(! function_exists("string_plural_select_en_gb")) {
function string_plural_select_en_gb($n){
$n = intval($n);
return intval($n != 1);
}}
$a->strings['"Blockem"'] = '"Blockem"';
$a->strings['Hides user\'s content by collapsing posts. Also replaces their avatar with generic image.'] = 'Hides user\'s content by collapsing posts. Also replaces their avatar with generic image.';
$a->strings['Comma separated profile URLS:'] = 'Comma separated profile URLs:';
$a->strings['Save Settings'] = 'Save settings';
$a->strings['BLOCKEM Settings saved.'] = 'Blockem settings saved.';
$a->strings['Hidden content by %s - Click to open/close'] = 'Hidden content by %s - Reveal/hide';
$a->strings['Unblock Author'] = 'Unblock author';
$a->strings['Block Author'] = 'Block author';
$a->strings['blockem settings updated'] = 'Blockem settings updated';

View file

@ -1,61 +0,0 @@
# ADDON blockem
# Copyright (C)
# This file is distributed under the same license as the Friendica blockem addon package.
#
#
# Translators:
# Adam Clark <adam@isurf.ca>, 2018
# Andy H3 <andy@hubup.pro>, 2018
# R C <miqrogroove@gmail.com>, 2018
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-04-01 11:11-0400\n"
"PO-Revision-Date: 2018-06-13 02:40+0000\n"
"Last-Translator: R C <miqrogroove@gmail.com>\n"
"Language-Team: English (United States) (http://www.transifex.com/Friendica/friendica/language/en_US/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: en_US\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: blockem.php:52 blockem.php:56
msgid "\"Blockem\""
msgstr "Blockem"
#: blockem.php:60
msgid ""
"Hides user's content by collapsing posts. Also replaces their avatar with "
"generic image."
msgstr "Hides user's content by collapsing posts. Also replaces their avatar with generic image."
#: blockem.php:61
msgid "Comma separated profile URLS:"
msgstr "Comma-separated profile URLs:"
#: blockem.php:65
msgid "Save Settings"
msgstr "Save settings"
#: blockem.php:78
msgid "BLOCKEM Settings saved."
msgstr "Blockem settings saved."
#: blockem.php:136
#, php-format
msgid "Filtered user: %s"
msgstr "Filtered user: %s"
#: blockem.php:189
msgid "Unblock Author"
msgstr "Unblock author"
#: blockem.php:191
msgid "Block Author"
msgstr "Block author"
#: blockem.php:223
msgid "blockem settings updated"
msgstr "Blockem settings updated"

View file

@ -1,16 +0,0 @@
<?php
if(! function_exists("string_plural_select_en_us")) {
function string_plural_select_en_us($n){
$n = intval($n);
return intval($n != 1);
}}
$a->strings['"Blockem"'] = 'Blockem';
$a->strings['Hides user\'s content by collapsing posts. Also replaces their avatar with generic image.'] = 'Hides user\'s content by collapsing posts. Also replaces their avatar with generic image.';
$a->strings['Comma separated profile URLS:'] = 'Comma-separated profile URLs:';
$a->strings['Save Settings'] = 'Save settings';
$a->strings['BLOCKEM Settings saved.'] = 'Blockem settings saved.';
$a->strings['Filtered user: %s'] = 'Filtered user: %s';
$a->strings['Unblock Author'] = 'Unblock author';
$a->strings['Block Author'] = 'Block author';
$a->strings['blockem settings updated'] = 'Blockem settings updated';

View file

@ -1,10 +0,0 @@
<?php
$a->strings["\"Blockem\" Settings"] = "\"Blockem\" Agordoj";
$a->strings["Comma separated profile URLS to block"] = "Blokotaj URL adresoj, disigita per komo";
$a->strings["Submit"] = "Sendi";
$a->strings["BLOCKEM Settings saved."] = "Konservis Agordojn de BLOCKEM.";
$a->strings["Blocked %s - Click to open/close"] = "%s blokita - Klaku por malfermi/fermi";
$a->strings["Unblock Author"] = "Malbloki Aŭtoron";
$a->strings["Block Author"] = "Bloki Aŭtoron";
$a->strings["blockem settings updated"] = "Ĝisdatigis la blockem agordojn";

View file

@ -1,53 +0,0 @@
# ADDON blockem
# Copyright (C)
# This file is distributed under the same license as the Friendica blockem addon package.
#
#
# Translators:
# Albert, 2018
# Senex Petrovic <javierruizo@hotmail.com>, 2021
# Tupambae.org, 2016
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
"PO-Revision-Date: 2021-04-01 09:45+0000\n"
"Last-Translator: Senex Petrovic <javierruizo@hotmail.com>\n"
"Language-Team: Spanish (http://www.transifex.com/Friendica/friendica/language/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: blockem.php:42 blockem.php:46
msgid "Blockem"
msgstr "Blockem (Bloquealos)"
#: blockem.php:50
msgid ""
"Hides user's content by collapsing posts. Also replaces their avatar with "
"generic image."
msgstr "Oculta el contenido del usuario al colapsar las publicaciones. También reemplaza su avatar con una imagen genérica."
#: blockem.php:51
msgid "Comma separated profile URLS:"
msgstr "URLs de perfil separadas por comas:"
#: blockem.php:55
msgid "Save Settings"
msgstr "Guardar configuración"
#: blockem.php:131
#, php-format
msgid "Filtered user: %s"
msgstr "Usuario filtrado: %s"
#: blockem.php:190
msgid "Unblock Author"
msgstr "Desbloquear autor"
#: blockem.php:192
msgid "Block Author"
msgstr "Bloquear autor"

View file

@ -1,14 +0,0 @@
<?php
if(! function_exists("string_plural_select_es")) {
function string_plural_select_es($n){
$n = intval($n);
return intval($n != 1);
}}
$a->strings['Blockem'] = 'Blockem (Bloquealos)';
$a->strings['Hides user\'s content by collapsing posts. Also replaces their avatar with generic image.'] = 'Oculta el contenido del usuario al colapsar las publicaciones. También reemplaza su avatar con una imagen genérica.';
$a->strings['Comma separated profile URLS:'] = 'URLs de perfil separadas por comas:';
$a->strings['Save Settings'] = 'Guardar configuración';
$a->strings['Filtered user: %s'] = 'Usuario filtrado: %s';
$a->strings['Unblock Author'] = 'Desbloquear autor';
$a->strings['Block Author'] = 'Bloquear autor';

View file

@ -1,60 +0,0 @@
# ADDON blockem
# Copyright (C)
# This file is distributed under the same license as the Friendica blockem addon package.
#
#
# Translators:
# Kris, 2018
# Kris, 2018
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-04-01 11:11-0400\n"
"PO-Revision-Date: 2018-04-18 14:44+0000\n"
"Last-Translator: Kris\n"
"Language-Team: Finnish (Finland) (http://www.transifex.com/Friendica/friendica/language/fi_FI/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: fi_FI\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: blockem.php:52 blockem.php:56
msgid "\"Blockem\""
msgstr "\"Blockem\""
#: blockem.php:60
msgid ""
"Hides user's content by collapsing posts. Also replaces their avatar with "
"generic image."
msgstr ""
#: blockem.php:61
msgid "Comma separated profile URLS:"
msgstr "Profiilien URL-osoitteet pilkulla erotettuina:"
#: blockem.php:65
msgid "Save Settings"
msgstr "Tallenna asetukset"
#: blockem.php:78
msgid "BLOCKEM Settings saved."
msgstr "Blockem -asetukset tallennettu"
#: blockem.php:136
#, php-format
msgid "Filtered user: %s"
msgstr "Suodatettu käyttäjä: %s"
#: blockem.php:189
msgid "Unblock Author"
msgstr "Poista kirjoittaja estolistalta"
#: blockem.php:191
msgid "Block Author"
msgstr "Lisää kirjoittaja estolistalle"
#: blockem.php:223
msgid "blockem settings updated"
msgstr "blockem -asetukset päivitetty"

View file

@ -1,15 +0,0 @@
<?php
if(! function_exists("string_plural_select_fi_fi")) {
function string_plural_select_fi_fi($n){
$n = intval($n);
return intval($n != 1);
}}
$a->strings['"Blockem"'] = '"Blockem"';
$a->strings['Comma separated profile URLS:'] = 'Profiilien URL-osoitteet pilkulla erotettuina:';
$a->strings['Save Settings'] = 'Tallenna asetukset';
$a->strings['BLOCKEM Settings saved.'] = 'Blockem -asetukset tallennettu';
$a->strings['Filtered user: %s'] = 'Suodatettu käyttäjä: %s';
$a->strings['Unblock Author'] = 'Poista kirjoittaja estolistalta';
$a->strings['Block Author'] = 'Lisää kirjoittaja estolistalle';
$a->strings['blockem settings updated'] = 'blockem -asetukset päivitetty';

View file

@ -1,50 +0,0 @@
# ADDON blockem
# Copyright (C)
# This file is distributed under the same license as the Friendica blockem addon package.
#
#
# Translators:
# Hypolite Petovan <hypolite@mrpetovan.com>, 2016
# Marie Olive <lacellule101@gmail.com>, 2018
# StefOfficiel <pichard.stephane@free.fr>, 2015
# Vladimir Núñez <lapoubelle111@gmail.com>, 2018
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-11-21 19:13-0500\n"
"PO-Revision-Date: 2014-06-22 11:20+0000\n"
"Last-Translator: Vladimir Núñez <lapoubelle111@gmail.com>, 2018\n"
"Language-Team: French (http://www.transifex.com/Friendica/friendica/language/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: fr\n"
"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
#: blockem.php:39
msgid ""
"Hides user's content by collapsing posts. Also replaces their avatar with "
"generic image."
msgstr "Cache le contenu de l'utilisateur en contractant les publications. Remplace aussi leur avatar par une image générique."
#: blockem.php:40
msgid "Comma separated profile URLS:"
msgstr "URLs de profil séparées par des virgules:"
#: blockem.php:45
msgid "Blockem"
msgstr "Bloquez-les"
#: blockem.php:120
#, php-format
msgid "Filtered user: %s"
msgstr "Utilisateur filtré:%s"
#: blockem.php:183
msgid "Unblock Author"
msgstr "Débloquer l'Auteur"
#: blockem.php:185
msgid "Block Author"
msgstr "Bloquer l'Auteur"

View file

@ -1,13 +0,0 @@
<?php
if(! function_exists("string_plural_select_fr")) {
function string_plural_select_fr($n){
$n = intval($n);
if (($n == 0 || $n == 1)) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; }
}}
$a->strings['Hides user\'s content by collapsing posts. Also replaces their avatar with generic image.'] = 'Cache le contenu de l\'utilisateur en contractant les publications. Remplace aussi leur avatar par une image générique.';
$a->strings['Comma separated profile URLS:'] = 'URLs de profil séparées par des virgules:';
$a->strings['Blockem'] = 'Bloquez-les';
$a->strings['Filtered user: %s'] = 'Utilisateur filtré:%s';
$a->strings['Unblock Author'] = 'Débloquer l\'Auteur';
$a->strings['Block Author'] = 'Bloquer l\'Auteur';

View file

@ -1,47 +0,0 @@
# ADDON blockem
# Copyright (C)
# This file is distributed under the same license as the Friendica blockem addon package.
#
#
# Translators:
# Balázs Úr, 2020
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-11-21 19:13-0500\n"
"PO-Revision-Date: 2014-06-22 11:20+0000\n"
"Last-Translator: Balázs Úr, 2020\n"
"Language-Team: Hungarian (http://www.transifex.com/Friendica/friendica/language/hu/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: hu\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: blockem.php:39
msgid ""
"Hides user's content by collapsing posts. Also replaces their avatar with "
"generic image."
msgstr "Elrejti a felhasználók tartalmát a bejegyzések összecsukásával. Ezenkívül lecseréli a profilképeiket egy általános képre."
#: blockem.php:40
msgid "Comma separated profile URLS:"
msgstr "Profil URL-ek vesszővel elválasztva:"
#: blockem.php:45
msgid "Blockem"
msgstr "Blockem"
#: blockem.php:120
#, php-format
msgid "Filtered user: %s"
msgstr "Kiszűrt felhasználó: %s"
#: blockem.php:183
msgid "Unblock Author"
msgstr "Szerző tiltásának feloldása"
#: blockem.php:185
msgid "Block Author"
msgstr "Szerző tiltása"

View file

@ -1,13 +0,0 @@
<?php
if(! function_exists("string_plural_select_hu")) {
function string_plural_select_hu($n){
$n = intval($n);
return intval($n != 1);
}}
$a->strings['Hides user\'s content by collapsing posts. Also replaces their avatar with generic image.'] = 'Elrejti a felhasználók tartalmát a bejegyzések összecsukásával. Ezenkívül lecseréli a profilképeiket egy általános képre.';
$a->strings['Comma separated profile URLS:'] = 'Profil URL-ek vesszővel elválasztva:';
$a->strings['Blockem'] = 'Blockem';
$a->strings['Filtered user: %s'] = 'Kiszűrt felhasználó: %s';
$a->strings['Unblock Author'] = 'Szerző tiltásának feloldása';
$a->strings['Block Author'] = 'Szerző tiltása';

View file

@ -1,10 +0,0 @@
<?php
$a->strings["\"Blockem\" Settings"] = "\"Blockem\" stillingar";
$a->strings["Comma separated profile URLS to block"] = "Banna lista af forsíðum (komma á milli)";
$a->strings["Submit"] = "Senda inn";
$a->strings["BLOCKEM Settings saved."] = "BLOCKEM stillingar vistaðar.";
$a->strings["Blocked %s - Click to open/close"] = "%s sett í straff - Smella til að taka úr/setja á";
$a->strings["Unblock Author"] = "Leyfa notanda";
$a->strings["Block Author"] = "Banna notanda";
$a->strings["blockem settings updated"] = "";

View file

@ -1,59 +0,0 @@
# ADDON blockem
# Copyright (C)
# This file is distributed under the same license as the Friendica blockem addon package.
#
#
# Translators:
# fabrixxm <fabrix.xm@gmail.com>, 2014,2018-2019
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-08-17 10:23+0200\n"
"PO-Revision-Date: 2019-03-11 14:21+0000\n"
"Last-Translator: fabrixxm <fabrix.xm@gmail.com>\n"
"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: blockem.php:54 blockem.php:58
msgid "Blockem"
msgstr "Blockem"
#: blockem.php:62
msgid ""
"Hides user's content by collapsing posts. Also replaces their avatar with "
"generic image."
msgstr "Nascondi il contenuto degli utenti collassando i messaggi. Sostituisce anche gli avatar con un'immagine generica."
#: blockem.php:63
msgid "Comma separated profile URLS:"
msgstr "URL profili separati da virgola:"
#: blockem.php:67
msgid "Save Settings"
msgstr "Salva Impostazioni"
#: blockem.php:81
msgid "BLOCKEM Settings saved."
msgstr "Impostazioni BLOCKEM salvate."
#: blockem.php:143
#, php-format
msgid "Filtered user: %s"
msgstr "Utente filtrato: %s"
#: blockem.php:202
msgid "Unblock Author"
msgstr "Sblocca autore"
#: blockem.php:204
msgid "Block Author"
msgstr "Blocca autore"
#: blockem.php:244
msgid "blockem settings updated"
msgstr "Impostazioni 'blockem' aggiornate."

View file

@ -1,16 +0,0 @@
<?php
if(! function_exists("string_plural_select_it")) {
function string_plural_select_it($n){
$n = intval($n);
return intval($n != 1);
}}
$a->strings['Blockem'] = 'Blockem';
$a->strings['Hides user\'s content by collapsing posts. Also replaces their avatar with generic image.'] = 'Nascondi il contenuto degli utenti collassando i messaggi. Sostituisce anche gli avatar con un\'immagine generica.';
$a->strings['Comma separated profile URLS:'] = 'URL profili separati da virgola:';
$a->strings['Save Settings'] = 'Salva Impostazioni';
$a->strings['BLOCKEM Settings saved.'] = 'Impostazioni BLOCKEM salvate.';
$a->strings['Filtered user: %s'] = 'Utente filtrato: %s';
$a->strings['Unblock Author'] = 'Sblocca autore';
$a->strings['Block Author'] = 'Blocca autore';
$a->strings['blockem settings updated'] = 'Impostazioni \'blockem\' aggiornate.';

View file

@ -1,10 +0,0 @@
<?php
$a->strings["\"Blockem\" Settings"] = "";
$a->strings["Comma separated profile URLS to block"] = "";
$a->strings["Submit"] = "Lagre";
$a->strings["BLOCKEM Settings saved."] = "";
$a->strings["Blocked %s - Click to open/close"] = "";
$a->strings["Unblock Author"] = "";
$a->strings["Block Author"] = "";
$a->strings["blockem settings updated"] = "";

View file

@ -1,60 +0,0 @@
# ADDON blockem
# Copyright (C)
# This file is distributed under the same license as the Friendica blockem addon package.
#
#
# Translators:
# AgnesElisa <agneselisa@disroot.org>, 2018
# Jeroen De Meerleer <me@jeroened.be>, 2018
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-08-17 10:23+0200\n"
"PO-Revision-Date: 2018-08-24 13:49+0000\n"
"Last-Translator: Jeroen De Meerleer <me@jeroened.be>\n"
"Language-Team: Dutch (http://www.transifex.com/Friendica/friendica/language/nl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: nl\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: blockem.php:54 blockem.php:58
msgid "Blockem"
msgstr "Blockem"
#: blockem.php:62
msgid ""
"Hides user's content by collapsing posts. Also replaces their avatar with "
"generic image."
msgstr "Verbergt de inhoud van het bericht van de gebruiker. Daarnaast vervangt het de avatar door een standaardafbeelding."
#: blockem.php:63
msgid "Comma separated profile URLS:"
msgstr "Profiel URLs (kommagescheiden):"
#: blockem.php:67
msgid "Save Settings"
msgstr "Instellingen opslaan"
#: blockem.php:81
msgid "BLOCKEM Settings saved."
msgstr "BLOCKEM instellingen opgeslagen."
#: blockem.php:143
#, php-format
msgid "Filtered user: %s"
msgstr "Gefilterde gebruiker: %s"
#: blockem.php:202
msgid "Unblock Author"
msgstr "Deblokkeer Auteur"
#: blockem.php:204
msgid "Block Author"
msgstr "Auteur blokkeren"
#: blockem.php:244
msgid "blockem settings updated"
msgstr "blockem instellingen opgeslagen"

View file

@ -1,16 +0,0 @@
<?php
if(! function_exists("string_plural_select_nl")) {
function string_plural_select_nl($n){
$n = intval($n);
return intval($n != 1);
}}
$a->strings['Blockem'] = 'Blockem';
$a->strings['Hides user\'s content by collapsing posts. Also replaces their avatar with generic image.'] = 'Verbergt de inhoud van het bericht van de gebruiker. Daarnaast vervangt het de avatar door een standaardafbeelding.';
$a->strings['Comma separated profile URLS:'] = 'Profiel URLs (kommagescheiden):';
$a->strings['Save Settings'] = 'Instellingen opslaan';
$a->strings['BLOCKEM Settings saved.'] = 'BLOCKEM instellingen opgeslagen.';
$a->strings['Filtered user: %s'] = 'Gefilterde gebruiker: %s';
$a->strings['Unblock Author'] = 'Deblokkeer Auteur';
$a->strings['Block Author'] = 'Auteur blokkeren';
$a->strings['blockem settings updated'] = 'blockem instellingen opgeslagen';

View file

@ -1,47 +0,0 @@
# ADDON blockem
# Copyright (C)
# This file is distributed under the same license as the Friendica blockem addon package.
#
#
# Translators:
# Waldemar Stoczkowski, 2018
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-11-21 19:13-0500\n"
"PO-Revision-Date: 2014-06-22 11:20+0000\n"
"Last-Translator: Waldemar Stoczkowski, 2018\n"
"Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: pl\n"
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
#: blockem.php:39
msgid ""
"Hides user's content by collapsing posts. Also replaces their avatar with "
"generic image."
msgstr "Ukrywa zawartość użytkownika, zwijając posty. Zastępuje również awatar wygenerowanym obrazem."
#: blockem.php:40
msgid "Comma separated profile URLS:"
msgstr "Rozdzielone przecinkami adresy URL profilu:"
#: blockem.php:45
msgid "Blockem"
msgstr "Zablokowanie"
#: blockem.php:120
#, php-format
msgid "Filtered user: %s"
msgstr "Użytkownik filtrowany: %s"
#: blockem.php:183
msgid "Unblock Author"
msgstr "Odblokuj autora"
#: blockem.php:185
msgid "Block Author"
msgstr "Zablokuj autora"

View file

@ -1,13 +0,0 @@
<?php
if(! function_exists("string_plural_select_pl")) {
function string_plural_select_pl($n){
$n = intval($n);
if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; }
}}
$a->strings['Hides user\'s content by collapsing posts. Also replaces their avatar with generic image.'] = 'Ukrywa zawartość użytkownika, zwijając posty. Zastępuje również awatar wygenerowanym obrazem.';
$a->strings['Comma separated profile URLS:'] = 'Rozdzielone przecinkami adresy URL profilu:';
$a->strings['Blockem'] = 'Zablokowanie';
$a->strings['Filtered user: %s'] = 'Użytkownik filtrowany: %s';
$a->strings['Unblock Author'] = 'Odblokuj autora';
$a->strings['Block Author'] = 'Zablokuj autora';

View file

@ -1,10 +0,0 @@
<?php
$a->strings["\"Blockem\" Settings"] = "Configurações \"Blockem\"";
$a->strings["Comma separated profile URLS to block"] = "URLS de perfis separados por vírgulas a serem bloqueados";
$a->strings["Submit"] = "Enviar";
$a->strings["BLOCKEM Settings saved."] = "Configurações BLOCKEM armazenadas.";
$a->strings["Blocked %s - Click to open/close"] = "Bloqueado %s - Clique para abrir/fechar";
$a->strings["Unblock Author"] = "Desbloqueie Autor";
$a->strings["Block Author"] = "Bloqueie Autor";
$a->strings["blockem settings updated"] = "configurações blockem atualizadas";

View file

@ -1,52 +0,0 @@
# ADDON blockem
# Copyright (C)
# This file is distributed under the same license as the Friendica blockem addon package.
#
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-06-22 13:18+0200\n"
"PO-Revision-Date: 2014-07-08 11:43+0000\n"
"Last-Translator: Arian - Cazare Muncitori <arianserv@gmail.com>\n"
"Language-Team: Romanian (Romania) (http://www.transifex.com/projects/p/friendica/language/ro_RO/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ro_RO\n"
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
#: blockem.php:53 blockem.php:57
msgid "\"Blockem\""
msgstr "\"Blockem\""
#: blockem.php:61
msgid "Comma separated profile URLS to block"
msgstr "Adresele URL de profil, de blocat, separate prin virgulă"
#: blockem.php:65
msgid "Save Settings"
msgstr "Salvare Configurări"
#: blockem.php:78
msgid "BLOCKEM Settings saved."
msgstr "Configurările BLOCKEM au fost salvate."
#: blockem.php:142
#, php-format
msgid "Blocked %s - Click to open/close"
msgstr "%s Blocate - Apăsați pentru a deschide/închide"
#: blockem.php:197
msgid "Unblock Author"
msgstr "Deblocare Autor"
#: blockem.php:199
msgid "Block Author"
msgstr "Blocare Autor"
#: blockem.php:231
msgid "blockem settings updated"
msgstr "Configurările blockem au fost actualizate"

View file

@ -1,15 +0,0 @@
<?php
if(! function_exists("string_plural_select_ro")) {
function string_plural_select_ro($n){
$n = intval($n);
if ($n==1) { return 0; } else if ((($n%100>19)||(($n%100==0)&&($n!=0)))) { return 2; } else { return 1; }
}}
$a->strings['"Blockem"'] = '"Blockem"';
$a->strings['Comma separated profile URLS to block'] = 'Adresele URL de profil, de blocat, separate prin virgulă';
$a->strings['Save Settings'] = 'Salvare Configurări';
$a->strings['BLOCKEM Settings saved.'] = 'Configurările BLOCKEM au fost salvate.';
$a->strings['Blocked %s - Click to open/close'] = '%s Blocate - Apăsați pentru a deschide/închide';
$a->strings['Unblock Author'] = 'Deblocare Autor';
$a->strings['Block Author'] = 'Blocare Autor';
$a->strings['blockem settings updated'] = 'Configurările blockem au fost actualizate';

View file

@ -1,60 +0,0 @@
# ADDON blockem
# Copyright (C)
# This file is distributed under the same license as the Friendica blockem addon package.
#
#
# Translators:
# Alexander An <ravnina@gmail.com>, 2020
# Stanislav N. <pztrn@pztrn.name>, 2017-2018
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-08-17 10:23+0200\n"
"PO-Revision-Date: 2020-04-23 14:13+0000\n"
"Last-Translator: Alexander An <ravnina@gmail.com>\n"
"Language-Team: Russian (http://www.transifex.com/Friendica/friendica/language/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ru\n"
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
#: blockem.php:54 blockem.php:58
msgid "Blockem"
msgstr "Blockem"
#: blockem.php:62
msgid ""
"Hides user's content by collapsing posts. Also replaces their avatar with "
"generic image."
msgstr "Скрыть контент пользователя. Также заменяет его аватар изображением по-умолчанию."
#: blockem.php:63
msgid "Comma separated profile URLS:"
msgstr "URL профилей, разделенные запятыми:"
#: blockem.php:67
msgid "Save Settings"
msgstr "Сохранить настройки"
#: blockem.php:81
msgid "BLOCKEM Settings saved."
msgstr "BLOCKEM Настройки сохранены."
#: blockem.php:143
#, php-format
msgid "Filtered user: %s"
msgstr "Отфильтрованный пользователь: %s"
#: blockem.php:202
msgid "Unblock Author"
msgstr "Разблокировать автора"
#: blockem.php:204
msgid "Block Author"
msgstr "Блокировать автора"
#: blockem.php:244
msgid "blockem settings updated"
msgstr "Настройки Blockem обновлены"

View file

@ -1,16 +0,0 @@
<?php
if(! function_exists("string_plural_select_ru")) {
function string_plural_select_ru($n){
$n = intval($n);
if ($n%10==1 && $n%100!=11) { return 0; } else if ($n%10>=2 && $n%10<=4 && ($n%100<12 || $n%100>14)) { return 1; } else if ($n%10==0 || ($n%10>=5 && $n%10<=9) || ($n%100>=11 && $n%100<=14)) { return 2; } else { return 3; }
}}
$a->strings['Blockem'] = 'Blockem';
$a->strings['Hides user\'s content by collapsing posts. Also replaces their avatar with generic image.'] = 'Скрыть контент пользователя. Также заменяет его аватар изображением по-умолчанию.';
$a->strings['Comma separated profile URLS:'] = 'URL профилей, разделенные запятыми:';
$a->strings['Save Settings'] = 'Сохранить настройки';
$a->strings['BLOCKEM Settings saved.'] = 'BLOCKEM Настройки сохранены.';
$a->strings['Filtered user: %s'] = 'Отфильтрованный пользователь: %s';
$a->strings['Unblock Author'] = 'Разблокировать автора';
$a->strings['Block Author'] = 'Блокировать автора';
$a->strings['blockem settings updated'] = 'Настройки Blockem обновлены';

View file

@ -1,47 +0,0 @@
# ADDON blockem
# Copyright (C)
# This file is distributed under the same license as the Friendica blockem addon package.
#
#
# Translators:
# Bjoessi <torbjorn.andersson@syte.se>, 2019
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-11-21 19:13-0500\n"
"PO-Revision-Date: 2021-12-22 15:27+0000\n"
"Last-Translator: Transifex Bot <>\n"
"Language-Team: Swedish (http://www.transifex.com/Friendica/friendica/language/sv/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: sv\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: blockem.php:39
msgid ""
"Hides user's content by collapsing posts. Also replaces their avatar with "
"generic image."
msgstr "Döljer användares inlägg genom sammanslagning nedåt. Användarens profilbild ersätts med en standardbild."
#: blockem.php:40
msgid "Comma separated profile URLS:"
msgstr "Kommaseparerade profiladresser:"
#: blockem.php:45
msgid "Blockem"
msgstr "BLOCKEM"
#: blockem.php:120
#, php-format
msgid "Filtered user: %s"
msgstr "Filtrerat på användare:%s"
#: blockem.php:183
msgid "Unblock Author"
msgstr "Avblockera författare"
#: blockem.php:185
msgid "Block Author"
msgstr "Blockera författare"

View file

@ -1,13 +0,0 @@
<?php
if(! function_exists("string_plural_select_sv")) {
function string_plural_select_sv($n){
$n = intval($n);
return intval($n != 1);
}}
$a->strings['Hides user\'s content by collapsing posts. Also replaces their avatar with generic image.'] = 'Döljer användares inlägg genom sammanslagning nedåt. Användarens profilbild ersätts med en standardbild.';
$a->strings['Comma separated profile URLS:'] = 'Kommaseparerade profiladresser:';
$a->strings['Blockem'] = 'BLOCKEM';
$a->strings['Filtered user: %s'] = 'Filtrerat på användare:%s';
$a->strings['Unblock Author'] = 'Avblockera författare';
$a->strings['Block Author'] = 'Blockera författare';

View file

@ -1,10 +0,0 @@
<?php
$a->strings["\"Blockem\" Settings"] = "「Blockem」配置";
$a->strings["Comma separated profile URLS to block"] = "逗号分简介URL为栏";
$a->strings["Submit"] = "提交";
$a->strings["BLOCKEM Settings saved."] = "「Blockem」配置保存了。";
$a->strings["Blocked %s - Click to open/close"] = "%s拦了点击为开关";
$a->strings["Unblock Author"] = "不拦作家";
$a->strings["Block Author"] = "拦作家";
$a->strings["blockem settings updated"] = "blockem设置更新了";

View file

@ -1 +0,0 @@
{{include file="field_textarea.tpl" field=$words}}

9
bluesky/README.md Normal file
View file

@ -0,0 +1,9 @@
Bluesky Addon
==============
This addon supports posting to and receiving posts from Bluesky.
No setup is needed for the admins to make it work for their users.
Bluesky itself is under development as well. It is planned to make it decentral.
The addon is prepared to support different servers. But it isn't enabled yet.

1775
bluesky/bluesky.php Normal file
View file

@ -0,0 +1,1775 @@
<?php
/**
* Name: Bluesky Connector
* Description: Post to Bluesky
* Version: 1.1
* Author: Michael Vogel <https://pirati.ca/profile/heluecht>
*
* @todo
* Currently technical issues in the core:
* - Outgoing mentions
*
* At some point in time:
* - Sending Quote shares https://atproto.com/lexicons/app-bsky-embed#appbskyembedrecord and https://atproto.com/lexicons/app-bsky-embed#appbskyembedrecordwithmedia
*
* Possibly not possible:
* - only fetch new posts
*
* Currently not possible, due to limitations in Friendica
* - mute contacts https://atproto.com/lexicons/app-bsky-graph#appbskygraphmuteactor
* - unmute contacts https://atproto.com/lexicons/app-bsky-graph#appbskygraphunmuteactor
*
* Possibly interesting:
* - https://atproto.com/lexicons/com-atproto-label#comatprotolabelsubscribelabels
*/
use Friendica\Content\Text\BBCode;
use Friendica\Content\Text\HTML;
use Friendica\Content\Text\Plaintext;
use Friendica\Core\Cache\Enum\Duration;
use Friendica\Core\Config\Util\ConfigFileManager;
use Friendica\Core\Hook;
use Friendica\Core\Logger;
use Friendica\Core\Protocol;
use Friendica\Core\Renderer;
use Friendica\Core\Worker;
use Friendica\Database\DBA;
use Friendica\DI;
use Friendica\Model\Contact;
use Friendica\Model\GServer;
use Friendica\Model\Item;
use Friendica\Model\ItemURI;
use Friendica\Model\Photo;
use Friendica\Model\Post;
use Friendica\Model\Tag;
use Friendica\Network\HTTPClient\Client\HttpClientAccept;
use Friendica\Network\HTTPClient\Client\HttpClientOptions;
use Friendica\Object\Image;
use Friendica\Protocol\Activity;
use Friendica\Protocol\Relay;
use Friendica\Util\DateTimeFormat;
use Friendica\Util\Strings;
const BLUESKY_DEFAULT_POLL_INTERVAL = 10; // given in minutes
const BLUESKY_IMAGE_SIZE = [1000000, 500000, 100000, 50000];
const BLUEKSY_STATUS_UNKNOWN = 0;
const BLUEKSY_STATUS_TOKEN_OK = 1;
const BLUEKSY_STATUS_SUCCESS = 2;
const BLUEKSY_STATUS_API_FAIL = 10;
const BLUEKSY_STATUS_DID_FAIL = 11;
const BLUEKSY_STATUS_PDS_FAIL = 12;
const BLUEKSY_STATUS_TOKEN_FAIL = 13;
/*
* (Currently) hard wired paths for Bluesky services
*/
const BLUESKY_DIRECTORY = 'https://plc.directory'; // Path to the directory server service to fetch the PDS of a given DID
const BLUESKY_PDS = 'https://bsky.social'; // Path to the personal data server service (PDS) to fetch the DID for a given handle
const BLUESKY_WEB = 'https://bsky.app'; // Path to the web interface with the user profile and posts
function bluesky_install()
{
Hook::register('load_config', __FILE__, 'bluesky_load_config');
Hook::register('hook_fork', __FILE__, 'bluesky_hook_fork');
Hook::register('post_local', __FILE__, 'bluesky_post_local');
Hook::register('notifier_normal', __FILE__, 'bluesky_send');
Hook::register('jot_networks', __FILE__, 'bluesky_jot_nets');
Hook::register('connector_settings', __FILE__, 'bluesky_settings');
Hook::register('connector_settings_post', __FILE__, 'bluesky_settings_post');
Hook::register('cron', __FILE__, 'bluesky_cron');
Hook::register('support_follow', __FILE__, 'bluesky_support_follow');
Hook::register('support_probe', __FILE__, 'bluesky_support_probe');
Hook::register('follow', __FILE__, 'bluesky_follow');
Hook::register('unfollow', __FILE__, 'bluesky_unfollow');
Hook::register('block', __FILE__, 'bluesky_block');
Hook::register('unblock', __FILE__, 'bluesky_unblock');
Hook::register('check_item_notification', __FILE__, 'bluesky_check_item_notification');
Hook::register('probe_detect', __FILE__, 'bluesky_probe_detect');
Hook::register('item_by_link', __FILE__, 'bluesky_item_by_link');
}
function bluesky_load_config(ConfigFileManager $loader)
{
DI::app()->getConfigCache()->load($loader->loadAddonConfig('bluesky'), \Friendica\Core\Config\ValueObject\Cache::SOURCE_STATIC);
}
function bluesky_check_item_notification(array &$notification_data)
{
$did = DI::pConfig()->get($notification_data['uid'], 'bluesky', 'did');
if (!empty($did)) {
$notification_data['profiles'][] = $did;
}
}
function bluesky_probe_detect(array &$hookData)
{
// Don't overwrite an existing result
if (isset($hookData['result'])) {
return;
}
// Avoid a lookup for the wrong network
if (!in_array($hookData['network'], ['', Protocol::BLUESKY])) {
return;
}
$pconfig = DBA::selectFirst('pconfig', ['uid'], ["`cat` = ? AND `k` = ? AND `v` != ?", 'bluesky', 'access_token', '']);
if (empty($pconfig['uid'])) {
return;
}
if (parse_url($hookData['uri'], PHP_URL_SCHEME) == 'did') {
$did = $hookData['uri'];
} elseif (preg_match('#^' . BLUESKY_WEB . '/profile/(.+)#', $hookData['uri'], $matches)) {
$did = bluesky_get_did($matches[1]);
if (empty($did)) {
return;
}
} else {
return;
}
$token = bluesky_get_token($pconfig['uid']);
if (empty($token)) {
return;
}
$data = bluesky_xrpc_get($pconfig['uid'], 'app.bsky.actor.getProfile', ['actor' => $did]);
if (empty($data)) {
return;
}
$hookData['result'] = bluesky_get_contact_fields($data, 0, false);
$hookData['result']['baseurl'] = bluesky_get_pds($did);
// Preparing probe data. This differs slightly from the contact array
$hookData['result']['about'] = HTML::toBBCode($data->description ?? '');
$hookData['result']['photo'] = $data->avatar ?? '';
$hookData['result']['header'] = $data->banner ?? '';
$hookData['result']['batch'] = '';
$hookData['result']['notify'] = '';
$hookData['result']['poll'] = '';
$hookData['result']['poco'] = '';
$hookData['result']['pubkey'] = '';
$hookData['result']['priority'] = 0;
$hookData['result']['guid'] = '';
}
function bluesky_item_by_link(array &$hookData)
{
// Don't overwrite an existing result
if (isset($hookData['item_id'])) {
return;
}
$token = bluesky_get_token($hookData['uid']);
if (empty($token)) {
return;
}
if (!preg_match('#^' . BLUESKY_WEB . '/profile/(.+)/post/(.+)#', $hookData['uri'], $matches)) {
return;
}
$did = bluesky_get_did($matches[1]);
if (empty($did)) {
return;
}
Logger::debug('Found bluesky post', ['url' => $hookData['uri'], 'handle' => $matches[1], 'did' => $did, 'cid' => $matches[2]]);
$uri = 'at://' . $did . '/app.bsky.feed.post/' . $matches[2];
$uri = bluesky_fetch_missing_post($uri, $hookData['uid'], $hookData['uid'], 0, 0);
Logger::debug('Got post', ['profile' => $matches[1], 'cid' => $matches[2], 'result' => $uri]);
if (!empty($uri)) {
$item = Post::selectFirst(['id'], ['uri' => $uri, 'uid' => $hookData['uid']]);
if (!empty($item['id'])) {
$hookData['item_id'] = $item['id'];
}
}
}
function bluesky_support_follow(array &$data)
{
if ($data['protocol'] == Protocol::BLUESKY) {
$data['result'] = true;
}
}
function bluesky_support_probe(array &$data)
{
if ($data['protocol'] == Protocol::BLUESKY) {
$data['result'] = true;
}
}
function bluesky_follow(array &$hook_data)
{
$token = bluesky_get_token($hook_data['uid']);
if (empty($token)) {
return;
}
Logger::debug('Check if contact is bluesky', ['data' => $hook_data]);
$contact = DBA::selectFirst('contact', [], ['network' => Protocol::BLUESKY, 'url' => $hook_data['url'], 'uid' => [0, $hook_data['uid']]]);
if (empty($contact)) {
return;
}
$record = [
'subject' => $contact['url'],
'createdAt' => DateTimeFormat::utcNow(DateTimeFormat::ATOM),
'$type' => 'app.bsky.graph.follow'
];
$post = [
'collection' => 'app.bsky.graph.follow',
'repo' => DI::pConfig()->get($hook_data['uid'], 'bluesky', 'did'),
'record' => $record
];
$activity = bluesky_xrpc_post($hook_data['uid'], 'com.atproto.repo.createRecord', $post);
if (!empty($activity->uri)) {
$hook_data['contact'] = $contact;
Logger::debug('Successfully start following', ['url' => $contact['url'], 'uri' => $activity->uri]);
}
}
function bluesky_unfollow(array &$hook_data)
{
$token = bluesky_get_token($hook_data['uid']);
if (empty($token)) {
return;
}
if ($hook_data['contact']['network'] != Protocol::BLUESKY) {
return;
}
$data = bluesky_xrpc_get($hook_data['uid'], 'app.bsky.actor.getProfile', ['actor' => $hook_data['contact']['url']]);
if (empty($data->viewer) || empty($data->viewer->following)) {
return;
}
bluesky_delete_post($data->viewer->following, $hook_data['uid']);
$hook_data['result'] = true;
}
function bluesky_block(array &$hook_data)
{
$token = bluesky_get_token($hook_data['uid']);
if (empty($token)) {
return;
}
Logger::debug('Check if contact is bluesky', ['data' => $hook_data]);
$contact = DBA::selectFirst('contact', [], ['network' => Protocol::BLUESKY, 'url' => $hook_data['url'], 'uid' => [0, $hook_data['uid']]]);
if (empty($contact)) {
return;
}
$record = [
'subject' => $contact['url'],
'createdAt' => DateTimeFormat::utcNow(DateTimeFormat::ATOM),
'$type' => 'app.bsky.graph.block'
];
$post = [
'collection' => 'app.bsky.graph.block',
'repo' => DI::pConfig()->get($hook_data['uid'], 'bluesky', 'did'),
'record' => $record
];
$activity = bluesky_xrpc_post($hook_data['uid'], 'com.atproto.repo.createRecord', $post);
if (!empty($activity->uri)) {
$cdata = Contact::getPublicAndUserContactID($hook_data['contact']['id'], $hook_data['uid']);
if (!empty($cdata['user'])) {
Contact::remove($cdata['user']);
}
Logger::debug('Successfully blocked contact', ['url' => $hook_data['contact']['url'], 'uri' => $activity->uri]);
}
}
function bluesky_unblock(array &$hook_data)
{
$token = bluesky_get_token($hook_data['uid']);
if (empty($token)) {
return;
}
if ($hook_data['contact']['network'] != Protocol::BLUESKY) {
return;
}
$data = bluesky_xrpc_get($hook_data['uid'], 'app.bsky.actor.getProfile', ['actor' => $hook_data['contact']['url']]);
if (empty($data->viewer) || empty($data->viewer->blocking)) {
return;
}
bluesky_delete_post($data->viewer->blocking, $hook_data['uid']);
$hook_data['result'] = true;
}
function bluesky_settings(array &$data)
{
if (!DI::userSession()->getLocalUserId()) {
return;
}
$enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'bluesky', 'post') ?? false;
$def_enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'bluesky', 'post_by_default') ?? false;
$pds = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'bluesky', 'pds');
$handle = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'bluesky', 'handle');
$did = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'bluesky', 'did');
$token = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'bluesky', 'access_token');
$import = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'bluesky', 'import') ?? false;
$import_feeds = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'bluesky', 'import_feeds') ?? false;
$t = Renderer::getMarkupTemplate('connector_settings.tpl', 'addon/bluesky/');
$html = Renderer::replaceMacros($t, [
'$enable' => ['bluesky', DI::l10n()->t('Enable Bluesky Post Addon'), $enabled],
'$bydefault' => ['bluesky_bydefault', DI::l10n()->t('Post to Bluesky by default'), $def_enabled],
'$import' => ['bluesky_import', DI::l10n()->t('Import the remote timeline'), $import],
'$import_feeds' => ['bluesky_import_feeds', DI::l10n()->t('Import the pinned feeds'), $import_feeds, DI::l10n()->t('When activated, Posts will be imported from all the feeds that you pinned in Bluesky.')],
'$pds' => ['bluesky_pds', DI::l10n()->t('Personal Data Server'), $pds, DI::l10n()->t('The personal data server (PDS) is the system that hosts your profile.'), '', 'readonly'],
'$handle' => ['bluesky_handle', DI::l10n()->t('Bluesky handle'), $handle],
'$did' => ['bluesky_did', DI::l10n()->t('Bluesky DID'), $did, DI::l10n()->t('This is the unique identifier. It will be fetched automatically, when the handle is entered.'), '', 'readonly'],
'$password' => ['bluesky_password', DI::l10n()->t('Bluesky app password'), '', DI::l10n()->t("Please don't add your real password here, but instead create a specific app password in the Bluesky settings.")],
'$status' => bluesky_get_status($handle, $did, $pds, $token),
]);
$data = [
'connector' => 'bluesky',
'title' => DI::l10n()->t('Bluesky Import/Export'),
'image' => 'images/bluesky.jpg',
'enabled' => $enabled,
'html' => $html,
];
}
function bluesky_get_status(string $handle = null, string $did = null, string $pds = null, string $token = null): string
{
if (empty($handle)) {
return DI::l10n()->t('You are not authenticated. Please enter your handle and the app password.');
}
$status = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'bluesky', 'status') ?? BLUEKSY_STATUS_UNKNOWN;
// Fallback mechanism for connection that had been established before the introduction of the status
if ($status == BLUEKSY_STATUS_UNKNOWN) {
if (empty($did)) {
$status = BLUEKSY_STATUS_DID_FAIL;
} elseif (empty($pds)) {
$status = BLUEKSY_STATUS_PDS_FAIL;
} elseif (!empty($token)) {
$status = BLUEKSY_STATUS_TOKEN_OK;
} else {
$status = BLUEKSY_STATUS_TOKEN_FAIL;
}
}
switch ($status) {
case BLUEKSY_STATUS_TOKEN_OK:
return DI::l10n()->t("You are authenticated to Bluesky. For security reasons the password isn't stored.");
case BLUEKSY_STATUS_SUCCESS:
return DI::l10n()->t('The communication with the personal data server service (PDS) is established.');
case BLUEKSY_STATUS_API_FAIL;
return DI::l10n()->t('Communication issues with the personal data server service (PDS).');
case BLUEKSY_STATUS_DID_FAIL:
return DI::l10n()->t('The DID for the provided handle could not be detected. Please check if you entered the correct handle.');
case BLUEKSY_STATUS_PDS_FAIL:
return DI::l10n()->t('The personal data server service (PDS) could not be detected.');
case BLUEKSY_STATUS_TOKEN_FAIL:
return DI::l10n()->t('The authentication with the provided handle and password failed. Please check if you entered the correct password.');
default:
return '';
}
}
function bluesky_settings_post(array &$b)
{
if (empty($_POST['bluesky-submit'])) {
return;
}
$old_pds = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'bluesky', 'pds');
$old_handle = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'bluesky', 'handle');
$old_did = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'bluesky', 'did');
$handle = trim($_POST['bluesky_handle'], ' @');
DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'bluesky', 'post', intval($_POST['bluesky']));
DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'bluesky', 'post_by_default', intval($_POST['bluesky_bydefault']));
DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'bluesky', 'handle', $handle);
DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'bluesky', 'import', intval($_POST['bluesky_import']));
DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'bluesky', 'import_feeds', intval($_POST['bluesky_import_feeds']));
if (!empty($handle)) {
if (empty($old_did) || $old_handle != $handle) {
$did = bluesky_get_did(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'bluesky', 'handle'));
if (empty($did)) {
DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'bluesky', 'status', BLUEKSY_STATUS_DID_FAIL);
}
DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'bluesky', 'did', $did);
} else {
$did = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'bluesky', 'did');
}
if (!empty($did) && (empty($old_pds) || $old_handle != $handle)) {
$pds = bluesky_get_pds($did);
if (empty($pds)) {
DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'bluesky', 'status', BLUEKSY_STATUS_PDS_FAIL);
}
DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'bluesky', 'pds', $pds);
} else {
$pds = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'bluesky', 'pds');
}
} else {
DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'bluesky', 'did');
DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'bluesky', 'pds');
DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'bluesky', 'access_token');
DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'bluesky', 'refresh_token');
DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'bluesky', 'token_created');
DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'bluesky', 'status');
}
if (!empty($did) && !empty($pds) && !empty($_POST['bluesky_password'])) {
bluesky_create_token(DI::userSession()->getLocalUserId(), $_POST['bluesky_password']);
}
}
function bluesky_jot_nets(array &$jotnets_fields)
{
if (!DI::userSession()->getLocalUserId()) {
return;
}
if (DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'bluesky', 'post')) {
$jotnets_fields[] = [
'type' => 'checkbox',
'field' => [
'bluesky_enable',
DI::l10n()->t('Post to Bluesky'),
DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'bluesky', 'post_by_default')
]
];
}
}
function bluesky_cron()
{
$last = (int)DI::keyValue()->get('bluesky_last_poll');
$poll_interval = intval(DI::config()->get('bluesky', 'poll_interval'));
if (!$poll_interval) {
$poll_interval = BLUESKY_DEFAULT_POLL_INTERVAL;
}
if ($last) {
$next = $last + ($poll_interval * 60);
if ($next > time()) {
Logger::notice('poll interval not reached');
return;
}
}
Logger::notice('cron_start');
$abandon_days = intval(DI::config()->get('system', 'account_abandon_days'));
if ($abandon_days < 1) {
$abandon_days = 0;
}
$abandon_limit = date(DateTimeFormat::MYSQL, time() - $abandon_days * 86400);
$pconfigs = DBA::selectToArray('pconfig', [], ['cat' => 'bluesky', 'k' => 'import', 'v' => true]);
foreach ($pconfigs as $pconfig) {
if ($abandon_days != 0) {
if (!DBA::exists('user', ["`uid` = ? AND `login_date` >= ?", $pconfig['uid'], $abandon_limit])) {
Logger::notice('abandoned account: timeline from user will not be imported', ['user' => $pconfig['uid']]);
continue;
}
}
// Refresh the token now, so that it doesn't need to be refreshed in parallel by the following workers
bluesky_get_token($pconfig['uid']);
Worker::add(['priority' => Worker::PRIORITY_MEDIUM, 'force_priority' => true], 'addon/bluesky/bluesky_timeline.php', $pconfig['uid'], $last);
Worker::add(['priority' => Worker::PRIORITY_MEDIUM, 'force_priority' => true], 'addon/bluesky/bluesky_notifications.php', $pconfig['uid'], $last);
if (DI::pConfig()->get($pconfig['uid'], 'bluesky', 'import_feeds')) {
$feeds = bluesky_get_feeds($pconfig['uid']);
foreach ($feeds as $feed) {
Worker::add(['priority' => Worker::PRIORITY_MEDIUM, 'force_priority' => true], 'addon/bluesky/bluesky_feed.php', $pconfig['uid'], $feed, $last);
}
}
}
$last_clean = DI::keyValue()->get('bluesky_last_clean');
if (empty($last_clean) || ($last_clean + 86400 < time())) {
Logger::notice('Start contact cleanup');
$contacts = DBA::select('account-user-view', ['id', 'pid'], ["`network` = ? AND `uid` != ? AND `rel` = ?", Protocol::BLUESKY, 0, Contact::NOTHING]);
while ($contact = DBA::fetch($contacts)) {
Worker::add(Worker::PRIORITY_LOW, 'MergeContact', $contact['pid'], $contact['id'], 0);
}
DBA::close($contacts);
DI::keyValue()->set('bluesky_last_clean', time());
Logger::notice('Contact cleanup done');
}
Logger::notice('cron_end');
DI::keyValue()->set('bluesky_last_poll', time());
}
function bluesky_hook_fork(array &$b)
{
if ($b['name'] != 'notifier_normal') {
return;
}
$post = $b['data'];
if (($post['created'] !== $post['edited']) && !$post['deleted']) {
DI::logger()->info('Editing is not supported by the addon');
$b['execute'] = false;
return;
}
if (DI::pConfig()->get($post['uid'], 'bluesky', 'import')) {
// Don't post if it isn't a reply to a bluesky post
if (($post['parent'] != $post['id']) && !Post::exists(['id' => $post['parent'], 'network' => Protocol::BLUESKY])) {
Logger::notice('No bluesky parent found', ['item' => $post['id']]);
$b['execute'] = false;
return;
}
} elseif (!strstr($post['postopts'] ?? '', 'bluesky') || ($post['parent'] != $post['id']) || $post['private']) {
DI::logger()->info('Activities are never exported when we don\'t import the bluesky timeline', ['uid' => $post['uid']]);
$b['execute'] = false;
return;
}
}
function bluesky_post_local(array &$b)
{
if ($b['edit']) {
return;
}
if (!DI::userSession()->getLocalUserId() || (DI::userSession()->getLocalUserId() != $b['uid'])) {
return;
}
if ($b['private'] || $b['parent']) {
return;
}
$bluesky_post = intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'bluesky', 'post'));
$bluesky_enable = (($bluesky_post && !empty($_REQUEST['bluesky_enable'])) ? intval($_REQUEST['bluesky_enable']) : 0);
// if API is used, default to the chosen settings
if ($b['api_source'] && intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'bluesky', 'post_by_default'))) {
$bluesky_enable = 1;
}
if (!$bluesky_enable) {
return;
}
if (strlen($b['postopts'])) {
$b['postopts'] .= ',';
}
$b['postopts'] .= 'bluesky';
}
function bluesky_send(array &$b)
{
if (($b['created'] !== $b['edited']) && !$b['deleted']) {
return;
}
if ($b['gravity'] != Item::GRAVITY_PARENT) {
Logger::debug('Got comment', ['item' => $b]);
if ($b['deleted']) {
$uri = bluesky_get_uri_class($b['uri']);
if (empty($uri)) {
Logger::debug('Not a bluesky post', ['uri' => $b['uri']]);
return;
}
bluesky_delete_post($b['uri'], $b['uid']);
return;
}
$root = bluesky_get_uri_class($b['parent-uri']);
$parent = bluesky_get_uri_class($b['thr-parent']);
if (empty($root) || empty($parent)) {
Logger::debug('No bluesky post', ['parent' => $b['parent'], 'thr-parent' => $b['thr-parent']]);
return;
}
if ($b['gravity'] == Item::GRAVITY_COMMENT) {
Logger::debug('Posting comment', ['root' => $root, 'parent' => $parent]);
bluesky_create_post($b, $root, $parent);
return;
} elseif (in_array($b['verb'], [Activity::LIKE, Activity::ANNOUNCE])) {
bluesky_create_activity($b, $parent);
}
return;
} elseif ($b['private'] || !strstr($b['postopts'], 'bluesky')) {
return;
}
bluesky_create_post($b);
}
function bluesky_create_activity(array $item, stdClass $parent = null)
{
$uid = $item['uid'];
$token = bluesky_get_token($uid);
if (empty($token)) {
return;
}
$did = DI::pConfig()->get($uid, 'bluesky', 'did');
if ($item['verb'] == Activity::LIKE) {
$record = [
'subject' => $parent,
'createdAt' => DateTimeFormat::utcNow(DateTimeFormat::ATOM),
'$type' => 'app.bsky.feed.like'
];
$post = [
'collection' => 'app.bsky.feed.like',
'repo' => $did,
'record' => $record
];
} elseif ($item['verb'] == Activity::ANNOUNCE) {
$record = [
'subject' => $parent,
'createdAt' => DateTimeFormat::utcNow(DateTimeFormat::ATOM),
'$type' => 'app.bsky.feed.repost'
];
$post = [
'collection' => 'app.bsky.feed.repost',
'repo' => $did,
'record' => $record
];
}
$activity = bluesky_xrpc_post($uid, 'com.atproto.repo.createRecord', $post);
if (empty($activity)) {
return;
}
Logger::debug('Activity done', ['return' => $activity]);
$uri = bluesky_get_uri($activity);
Item::update(['extid' => $uri], ['id' => $item['id']]);
Logger::debug('Set extid', ['id' => $item['id'], 'extid' => $activity]);
}
function bluesky_create_post(array $item, stdClass $root = null, stdClass $parent = null)
{
$uid = $item['uid'];
$token = bluesky_get_token($uid);
if (empty($token)) {
return;
}
// Try to fetch the language from the post itself
if (!empty($item['language'])) {
$language = array_key_first(json_decode($item['language'], true));
} else {
$language = '';
}
$did = DI::pConfig()->get($uid, 'bluesky', 'did');
$urls = bluesky_get_urls(Post\Media::removeFromBody($item['body']));
$item['body'] = $urls['body'];
$msg = Plaintext::getPost($item, 300, false, BBCode::BLUESKY);
foreach ($msg['parts'] as $key => $part) {
$facets = bluesky_get_facets($part, $urls['urls']);
$record = [
'text' => $facets['body'],
'$type' => 'app.bsky.feed.post',
'createdAt' => DateTimeFormat::utcNow(DateTimeFormat::ATOM),
];
if (!empty($language)) {
$record['langs'] = [$language];
}
if (!empty($facets['facets'])) {
$record['facets'] = $facets['facets'];
}
if (!empty($root)) {
$record['reply'] = ['root' => $root, 'parent' => $parent];
}
if ($key == count($msg['parts']) - 1) {
$record = bluesky_add_embed($uid, $msg, $record);
if (empty($record)) {
if (Worker::getRetrial() < 3) {
Worker::defer();
}
return;
}
}
$post = [
'collection' => 'app.bsky.feed.post',
'repo' => $did,
'record' => $record
];
$parent = bluesky_xrpc_post($uid, 'com.atproto.repo.createRecord', $post);
if (empty($parent)) {
if ($part == 0) {
Worker::defer();
}
return;
}
Logger::debug('Posting done', ['return' => $parent]);
if (empty($root)) {
$root = $parent;
}
if (($key == 0) && ($item['gravity'] != Item::GRAVITY_PARENT)) {
$uri = bluesky_get_uri($parent);
Item::update(['extid' => $uri], ['id' => $item['id']]);
Logger::debug('Set extid', ['id' => $item['id'], 'extid' => $uri]);
}
}
}
function bluesky_get_urls(string $body): array
{
// Remove all hashtag and mention links
$body = preg_replace("/([@!])\[url\=(.*?)\](.*?)\[\/url\]/ism", '$1$3', $body);
$body = BBCode::expandVideoLinks($body);
$urls = [];
// Search for hash tags
if (preg_match_all("/#\[url\=(https?:.*?)\](.*?)\[\/url\]/ism", $body, $matches, PREG_SET_ORDER)) {
foreach ($matches as $match) {
$text = '#' . $match[2];
$urls[] = ['tag' => $match[2], 'text' => $text, 'hash' => $text];
$body = str_replace($match[0], $text, $body);
}
}
// Search for pure links
if (preg_match_all("/\[url\](https?:.*?)\[\/url\]/ism", $body, $matches, PREG_SET_ORDER)) {
foreach ($matches as $match) {
$text = Strings::getStyledURL($match[1]);
$hash = bluesky_get_hash_for_url($match[0], mb_strlen($text));
$urls[] = ['url' => $match[1], 'text' => $text, 'hash' => $hash];
$body = str_replace($match[0], $hash, $body);
}
}
// Search for links with descriptions
if (preg_match_all("/\[url\=(https?:.*?)\](.*?)\[\/url\]/ism", $body, $matches, PREG_SET_ORDER)) {
foreach ($matches as $match) {
if ($match[1] == $match[2]) {
$text = Strings::getStyledURL($match[1]);
} else {
$text = $match[2];
}
if (mb_strlen($text) < 100) {
$hash = bluesky_get_hash_for_url($match[0], mb_strlen($text));
$urls[] = ['url' => $match[1], 'text' => $text, 'hash' => $hash];
$body = str_replace($match[0], $hash, $body);
} else {
$text = Strings::getStyledURL($match[1]);
$hash = bluesky_get_hash_for_url($match[0], mb_strlen($text));
$urls[] = ['url' => $match[1], 'text' => $text, 'hash' => $hash];
$body = str_replace($match[0], $text . ' ' . $hash, $body);
}
}
}
return ['body' => $body, 'urls' => $urls];
}
function bluesky_get_hash_for_url(string $text, int $linklength): string
{
if ($linklength <= 10) {
return '|' . hash('crc32', $text) . '|';
}
return substr('|' . hash('crc32', $text) . base64_encode($text), 0, $linklength - 2) . '|';
}
function bluesky_get_facets(string $body, array $urls): array
{
$facets = [];
foreach ($urls as $url) {
$pos = strpos($body, $url['hash']);
if ($pos === false) {
continue;
}
if ($pos > 0) {
$prefix = substr($body, 0, $pos);
} else {
$prefix = '';
}
$body = $prefix . $url['text'] . substr($body, $pos + strlen($url['hash']));
$facet = new stdClass;
$facet->index = new stdClass;
$facet->index->byteEnd = $pos + strlen($url['text']);
$facet->index->byteStart = $pos;
$feature = new stdClass;
$type = '$type';
if (!empty($url['tag'])) {
$feature->tag = $url['tag'];
$feature->$type = 'app.bsky.richtext.facet#tag';
} elseif (!empty($url['url'])) {
$feature->uri = $url['url'];
$feature->$type = 'app.bsky.richtext.facet#link';
} else {
continue;
}
$facet->features = [$feature];
$facets[] = $facet;
}
return ['facets' => $facets, 'body' => $body];
}
function bluesky_add_embed(int $uid, array $msg, array $record): array
{
if (($msg['type'] != 'link') && !empty($msg['images'])) {
$images = [];
foreach ($msg['images'] as $image) {
if (count($images) == 4) {
continue;
}
$photo = Photo::selectFirst([], ['id' => $image['id']]);
$blob = bluesky_upload_blob($uid, $photo);
if (empty($blob)) {
return [];
}
$images[] = ['alt' => $image['description'] ?? '', 'image' => $blob];
}
if (!empty($images)) {
$record['embed'] = ['$type' => 'app.bsky.embed.images', 'images' => $images];
}
} elseif ($msg['type'] == 'link') {
$record['embed'] = [
'$type' => 'app.bsky.embed.external',
'external' => [
'uri' => $msg['url'],
'title' => $msg['title'] ?? '',
'description' => $msg['description'] ?? '',
]
];
if (!empty($msg['image'])) {
$photo = Photo::createPhotoForExternalResource($msg['image']);
$blob = bluesky_upload_blob($uid, $photo);
if (!empty($blob)) {
$record['embed']['external']['thumb'] = $blob;
}
}
}
return $record;
}
function bluesky_upload_blob(int $uid, array $photo): ?stdClass
{
$retrial = Worker::getRetrial();
$content = Photo::getImageForPhoto($photo);
$picture = new Image($content, $photo['type']);
$height = $picture->getHeight();
$width = $picture->getWidth();
$size = strlen($content);
$picture = Photo::resizeToFileSize($picture, BLUESKY_IMAGE_SIZE[$retrial]);
$new_height = $picture->getHeight();
$new_width = $picture->getWidth();
$content = $picture->asString();
$new_size = strlen($content);
Logger::info('Uploading', ['uid' => $uid, 'retrial' => $retrial, 'height' => $new_height, 'width' => $new_width, 'size' => $new_size, 'orig-height' => $height, 'orig-width' => $width, 'orig-size' => $size]);
$data = bluesky_post($uid, '/xrpc/com.atproto.repo.uploadBlob', $content, ['Content-type' => $photo['type'], 'Authorization' => ['Bearer ' . bluesky_get_token($uid)]]);
if (empty($data)) {
Logger::info('Uploading failed', ['uid' => $uid, 'retrial' => $retrial, 'height' => $new_height, 'width' => $new_width, 'size' => $new_size, 'orig-height' => $height, 'orig-width' => $width, 'orig-size' => $size]);
return null;
}
Logger::debug('Uploaded blob', ['return' => $data, 'uid' => $uid, 'retrial' => $retrial, 'height' => $new_height, 'width' => $new_width, 'size' => $new_size, 'orig-height' => $height, 'orig-width' => $width, 'orig-size' => $size]);
return $data->blob;
}
function bluesky_delete_post(string $uri, int $uid)
{
$parts = bluesky_get_uri_parts($uri);
if (empty($parts)) {
Logger::debug('No uri delected', ['uri' => $uri]);
return;
}
bluesky_xrpc_post($uid, 'com.atproto.repo.deleteRecord', $parts);
Logger::debug('Deleted', ['parts' => $parts]);
}
function bluesky_fetch_timeline(int $uid, int $last_poll)
{
$data = bluesky_xrpc_get($uid, 'app.bsky.feed.getTimeline');
if (empty($data)) {
return;
}
if (empty($data->feed)) {
return;
}
foreach (array_reverse($data->feed) as $entry) {
bluesky_process_post($entry->post, $uid, Item::PR_NONE, 0, $last_poll);
if (!empty($entry->reason)) {
bluesky_process_reason($entry->reason, bluesky_get_uri($entry->post), $uid);
}
}
// @todo Support paging
// [cursor] => 1684670516000::bafyreidq3ilwslmlx72jf5vrk367xcc63s6lrhzlyup2bi3zwcvso6w2vi
}
function bluesky_process_reason(stdClass $reason, string $uri, int $uid)
{
$type = '$type';
if ($reason->$type != 'app.bsky.feed.defs#reasonRepost') {
return;
}
$contact = bluesky_get_contact($reason->by, $uid, $uid);
$item = [
'network' => Protocol::BLUESKY,
'uid' => $uid,
'wall' => false,
'uri' => $reason->by->did . '/app.bsky.feed.repost/' . $reason->indexedAt,
'private' => Item::UNLISTED,
'verb' => Activity::POST,
'contact-id' => $contact['id'],
'author-name' => $contact['name'],
'author-link' => $contact['url'],
'author-avatar' => $contact['avatar'],
'verb' => Activity::ANNOUNCE,
'body' => Activity::ANNOUNCE,
'gravity' => Item::GRAVITY_ACTIVITY,
'object-type' => Activity\ObjectType::NOTE,
'thr-parent' => $uri,
];
if (Post::exists(['uri' => $item['uri'], 'uid' => $uid])) {
return;
}
$item['guid'] = Item::guidFromUri($item['uri'], $contact['alias']);
$item['owner-name'] = $item['author-name'];
$item['owner-link'] = $item['author-link'];
$item['owner-avatar'] = $item['author-avatar'];
if (Item::insert($item)) {
$cdata = Contact::getPublicAndUserContactID($contact['id'], $uid);
Item::update(['post-reason' => Item::PR_ANNOUNCEMENT, 'causer-id' => $cdata['public']], ['uri' => $uri, 'uid' => $uid]);
}
}
function bluesky_fetch_notifications(int $uid, int $last_poll)
{
$data = bluesky_xrpc_get($uid, 'app.bsky.notification.listNotifications');
if (empty($data->notifications)) {
return;
}
foreach ($data->notifications as $notification) {
$uri = bluesky_get_uri($notification);
if (Post::exists(['uri' => $uri, 'uid' => $uid]) || Post::exists(['extid' => $uri, 'uid' => $uid])) {
Logger::debug('Notification already processed', ['uid' => $uid, 'reason' => $notification->reason, 'uri' => $uri, 'indexedAt' => $notification->indexedAt]);
continue;
}
Logger::debug('Process notification', ['uid' => $uid, 'reason' => $notification->reason, 'uri' => $uri, 'indexedAt' => $notification->indexedAt]);
switch ($notification->reason) {
case 'like':
$item = bluesky_get_header($notification, $uri, $uid, $uid);
$item['gravity'] = Item::GRAVITY_ACTIVITY;
$item['body'] = $item['verb'] = Activity::LIKE;
$item['thr-parent'] = bluesky_get_uri($notification->record->subject);
$item['thr-parent'] = bluesky_fetch_missing_post($item['thr-parent'], $uid, $uid, $item['contact-id'], 0, $last_poll);
if (!empty($item['thr-parent'])) {
$data = Item::insert($item);
Logger::debug('Got like', ['uid' => $uid, 'result' => $data, 'uri' => $uri]);
} else {
Logger::info('Thread parent not found', ['uid' => $uid, 'parent' => $item['thr-parent'], 'uri' => $uri]);
}
break;
case 'repost':
$item = bluesky_get_header($notification, $uri, $uid, $uid);
$item['gravity'] = Item::GRAVITY_ACTIVITY;
$item['body'] = $item['verb'] = Activity::ANNOUNCE;
$item['thr-parent'] = bluesky_get_uri($notification->record->subject);
$item['thr-parent'] = bluesky_fetch_missing_post($item['thr-parent'], $uid, $uid, $item['contact-id'], 0, $last_poll);
if (!empty($item['thr-parent'])) {
$data = Item::insert($item);
Logger::debug('Got repost', ['uid' => $uid, 'result' => $data, 'uri' => $uri]);
} else {
Logger::info('Thread parent not found', ['uid' => $uid, 'parent' => $item['thr-parent'], 'uri' => $uri]);
}
break;
case 'follow':
$contact = bluesky_get_contact($notification->author, $uid, $uid);
Logger::debug('New follower', ['uid' => $uid, 'nick' => $contact['nick'], 'uri' => $uri]);
break;
case 'mention':
$data = bluesky_process_post($notification, $uid, Item::PR_PUSHED, 0, $last_poll);
Logger::debug('Got mention', ['uid' => $uid, 'result' => $data, 'uri' => $uri]);
break;
case 'reply':
$data = bluesky_process_post($notification, $uid, Item::PR_PUSHED, 0, $last_poll);
Logger::debug('Got reply', ['uid' => $uid, 'result' => $data, 'uri' => $uri]);
break;
case 'quote':
$data = bluesky_process_post($notification, $uid, Item::PR_PUSHED, 0, $last_poll);
Logger::debug('Got quote', ['uid' => $uid, 'result' => $data, 'uri' => $uri]);
break;
default:
Logger::notice('Unhandled reason', ['reason' => $notification->reason, 'uri' => $uri]);
break;
}
}
}
function bluesky_fetch_feed(int $uid, string $feed, int $last_poll)
{
$data = bluesky_xrpc_get($uid, 'app.bsky.feed.getFeed', ['feed' => $feed]);
if (empty($data)) {
return;
}
if (empty($data->feed)) {
return;
}
$feeddata = bluesky_xrpc_get($uid, 'app.bsky.feed.getFeedGenerator', ['feed' => $feed]);
if (!empty($feeddata)) {
$feedurl = $feeddata->view->uri;
$feedname = $feeddata->view->displayName;
} else {
$feedurl = $feed;
$feedname = $feed;
}
foreach (array_reverse($data->feed) as $entry) {
$contact = bluesky_get_contact($entry->post->author, 0, $uid);
$languages = $entry->post->record->langs ?? [];
if (!Relay::isWantedLanguage($entry->post->record->text, 0, $contact['id'] ?? 0, $languages)) {
Logger::debug('Unwanted language detected', ['text' => $entry->post->record->text]);
continue;
}
$id = bluesky_process_post($entry->post, $uid, Item::PR_TAG, 0, $last_poll);
if (!empty($id)) {
$post = Post::selectFirst(['uri-id'], ['id' => $id]);
if (!empty($post['uri-id'])) {
$stored = Post\Category::storeFileByURIId($post['uri-id'], $uid, Post\Category::SUBCRIPTION, $feedname, $feedurl);
Logger::debug('Stored tag subscription for user', ['uri-id' => $post['uri-id'], 'uid' => $uid, 'name' => $feedname, 'url' => $feedurl, 'stored' => $stored]);
} else {
Logger::notice('Post not found', ['id' => $id, 'entry' => $entry]);
}
}
if (!empty($entry->reason)) {
bluesky_process_reason($entry->reason, bluesky_get_uri($entry->post), $uid);
}
}
}
function bluesky_process_post(stdClass $post, int $uid, int $post_reason, int $level, int $last_poll): int
{
$uri = bluesky_get_uri($post);
if ($id = Post::selectFirst(['id'], ['uri' => $uri, 'uid' => $uid])) {
return $id['id'];
}
if ($id = Post::selectFirst(['id'], ['extid' => $uri, 'uid' => $uid])) {
return $id['id'];
}
Logger::debug('Importing post', ['uid' => $uid, 'indexedAt' => $post->indexedAt, 'uri' => $post->uri, 'cid' => $post->cid, 'root' => $post->record->reply->root ?? '']);
$item = bluesky_get_header($post, $uri, $uid, $uid);
$item = bluesky_get_content($item, $post->record, $uri, $uid, $uid, $level, $last_poll);
if (empty($item)) {
return 0;
}
if (!empty($post->embed)) {
$item = bluesky_add_media($post->embed, $item, $uid, $level, $last_poll);
}
if (empty($item['post-reason'])) {
$item['post-reason'] = $post_reason;
}
return Item::insert($item);
}
function bluesky_get_header(stdClass $post, string $uri, int $uid, int $fetch_uid): array
{
$parts = bluesky_get_uri_parts($uri);
if (empty($post->author)) {
return [];
}
$contact = bluesky_get_contact($post->author, $uid, $fetch_uid);
$item = [
'network' => Protocol::BLUESKY,
'uid' => $uid,
'wall' => false,
'uri' => $uri,
'guid' => $post->cid,
'private' => Item::UNLISTED,
'verb' => Activity::POST,
'contact-id' => $contact['id'],
'author-name' => $contact['name'],
'author-link' => $contact['url'],
'author-avatar' => $contact['avatar'],
'plink' => $contact['alias'] . '/post/' . $parts->rkey,
'source' => json_encode($post),
];
$item['uri-id'] = ItemURI::getIdByURI($uri);
$item['owner-name'] = $item['author-name'];
$item['owner-link'] = $item['author-link'];
$item['owner-avatar'] = $item['author-avatar'];
if (in_array($contact['rel'], [Contact::SHARING, Contact::FRIEND])) {
$item['post-reason'] = Item::PR_FOLLOWER;
}
return $item;
}
function bluesky_get_content(array $item, stdClass $record, string $uri, int $uid, int $fetch_uid, int $level, int $last_poll): array
{
if (empty($item)) {
return [];
}
if (!empty($record->reply)) {
$item['parent-uri'] = bluesky_get_uri($record->reply->root);
if ($item['parent-uri'] != $uri) {
$item['parent-uri'] = bluesky_fetch_missing_post($item['parent-uri'], $uid, $fetch_uid, $item['contact-id'], $level, $last_poll);
if (empty($item['parent-uri'])) {
return [];
}
}
$item['thr-parent'] = bluesky_get_uri($record->reply->parent);
if (!in_array($item['thr-parent'], [$uri, $item['parent-uri']])) {
$item['thr-parent'] = bluesky_fetch_missing_post($item['thr-parent'], $uid, $fetch_uid, $item['contact-id'], $level, $last_poll, $item['parent-uri']);
if (empty($item['thr-parent'])) {
return [];
}
}
}
$item['body'] = bluesky_get_text($record, $item['uri-id']);
$item['created'] = DateTimeFormat::utc($record->createdAt, DateTimeFormat::MYSQL);
$item['transmitted-languages'] = $record->langs ?? [];
if (($last_poll != 0) && strtotime($item['created']) > $last_poll) {
$item['received'] = $item['created'];
}
return $item;
}
function bluesky_get_text(stdClass $record, int $uri_id): string
{
$text = $record->text ?? '';
if (empty($record->facets)) {
return $text;
}
$facets = [];
foreach ($record->facets as $facet) {
$facets[$facet->index->byteStart] = $facet;
}
krsort($facets);
foreach ($facets as $facet) {
$prefix = substr($text, 0, $facet->index->byteStart);
$linktext = substr($text, $facet->index->byteStart, $facet->index->byteEnd - $facet->index->byteStart);
$suffix = substr($text, $facet->index->byteEnd);
$url = '';
$type = '$type';
foreach ($facet->features as $feature) {
switch ($feature->$type) {
case 'app.bsky.richtext.facet#link':
$url = $feature->uri;
break;
case 'app.bsky.richtext.facet#mention':
$contact = Contact::getByURL($feature->did, null, ['id']);
if (!empty($contact['id'])) {
$url = DI::baseUrl() . '/contact/' . $contact['id'];
if (substr($linktext, 0, 1) == '@') {
$prefix .= '@';
$linktext = substr($linktext, 1);
}
}
break;
case 'app.bsky.richtext.facet#tag';
Tag::store($uri_id, Tag::HASHTAG, $feature->tag);
$url = DI::baseUrl() . '/search?tag=' . urlencode($feature->tag);
$linktext = '#' . $feature->tag;
break;
default:
Logger::notice('Unhandled feature type', ['type' => $feature->$type, 'feature' => $feature, 'record' => $record]);
break;
}
}
if (!empty($url)) {
$text = $prefix . '[url=' . $url . ']' . $linktext . '[/url]' . $suffix;
}
}
return $text;
}
function bluesky_add_media(stdClass $embed, array $item, int $fetch_uid, int $level, int $last_poll): array
{
$type = '$type';
switch ($embed->$type) {
case 'app.bsky.embed.images#view':
foreach ($embed->images as $image) {
$media = [
'uri-id' => $item['uri-id'],
'type' => Post\Media::IMAGE,
'url' => $image->fullsize,
'preview' => $image->thumb,
'description' => $image->alt,
];
Post\Media::insert($media);
}
break;
case 'app.bsky.embed.external#view':
$media = [
'uri-id' => $item['uri-id'],
'type' => Post\Media::HTML,
'url' => $embed->external->uri,
'name' => $embed->external->title,
'description' => $embed->external->description,
];
Post\Media::insert($media);
break;
case 'app.bsky.embed.record#view':
$uri = bluesky_get_uri($embed->record);
$shared = Post::selectFirst(['uri-id'], ['uri' => $uri, 'uid' => $item['uid']]);
if (empty($shared)) {
if (empty($embed->record->value)) {
Logger::info('Record has got no value', ['record' => $embed->record]);
break;
}
$shared = bluesky_get_header($embed->record, $uri, 0, $fetch_uid);
$shared = bluesky_get_content($shared, $embed->record->value, $uri, $item['uid'], $fetch_uid, $level, $last_poll);
if (!empty($shared)) {
if (!empty($embed->record->embeds)) {
foreach ($embed->record->embeds as $single) {
$shared = bluesky_add_media($single, $shared, $fetch_uid, $level, $last_poll);
}
}
Item::insert($shared);
}
}
if (!empty($shared['uri-id'])) {
$item['quote-uri-id'] = $shared['uri-id'];
}
break;
case 'app.bsky.embed.recordWithMedia#view':
$uri = bluesky_get_uri($embed->record->record);
$shared = Post::selectFirst(['uri-id'], ['uri' => $uri, 'uid' => $item['uid']]);
if (empty($shared)) {
$shared = bluesky_get_header($embed->record->record, $uri, 0, $fetch_uid);
$shared = bluesky_get_content($shared, $embed->record->record->value, $uri, $item['uid'], $fetch_uid, $level, $last_poll);
if (!empty($shared)) {
if (!empty($embed->record->record->embeds)) {
foreach ($embed->record->record->embeds as $single) {
$shared = bluesky_add_media($single, $shared, $fetch_uid, $level, $last_poll);
}
}
Item::insert($shared);
}
}
if (!empty($shared['uri-id'])) {
$item['quote-uri-id'] = $shared['uri-id'];
}
if (!empty($embed->media)) {
$item = bluesky_add_media($embed->media, $item, $fetch_uid, $level, $last_poll);
}
break;
default:
Logger::notice('Unhandled embed type', ['type' => $embed->$type, 'embed' => $embed]);
break;
}
return $item;
}
function bluesky_get_uri(stdClass $post): string
{
if (empty($post->cid)) {
Logger::info('Invalid URI', ['post' => $post]);
return '';
}
return $post->uri . ':' . $post->cid;
}
function bluesky_get_uri_class(string $uri): ?stdClass
{
if (empty($uri)) {
return null;
}
$elements = explode(':', $uri);
if (empty($elements) || ($elements[0] != 'at')) {
$post = Post::selectFirstPost(['extid'], ['uri' => $uri]);
return bluesky_get_uri_class($post['extid'] ?? '');
}
$class = new stdClass;
$class->cid = array_pop($elements);
$class->uri = implode(':', $elements);
if ((substr_count($class->uri, '/') == 2) && (substr_count($class->cid, '/') == 2)) {
$class->uri .= ':' . $class->cid;
$class->cid = '';
}
return $class;
}
function bluesky_get_uri_parts(string $uri): ?stdClass
{
$class = bluesky_get_uri_class($uri);
if (empty($class)) {
return null;
}
$parts = explode('/', substr($class->uri, 5));
$class = new stdClass;
$class->repo = $parts[0];
$class->collection = $parts[1];
$class->rkey = $parts[2];
return $class;
}
function bluesky_fetch_missing_post(string $uri, int $uid, int $fetch_uid, int $causer, int $level, int $last_poll = 0, string $fallback = ''): string
{
$fetched_uri = bluesky_fetch_post($uri, $uid);
if (!empty($fetched_uri)) {
return $fetched_uri;
}
if (++$level > 100) {
Logger::info('Recursion level too deep', ['level' => $level, 'uid' => $uid, 'uri' => $uri, 'fallback' => $fallback]);
// When the level is too deep we will fallback to the parent uri.
// Allthough the threading won't be correct, we at least had stored all posts and won't try again
return $fallback;
}
$class = bluesky_get_uri_class($uri);
$fetch_uri = $class->uri;
Logger::debug('Fetch missing post', ['level' => $level, 'uid' => $uid, 'uri' => $uri]);
$data = bluesky_xrpc_get($fetch_uid, 'app.bsky.feed.getPostThread', ['uri' => $fetch_uri]);
if (empty($data)) {
Logger::info('Thread was not fetched', ['level' => $level, 'uid' => $uid, 'uri' => $uri, 'fallback' => $fallback]);
return $fallback;
}
Logger::debug('Reply count', ['level' => $level, 'uid' => $uid, 'uri' => $uri]);
if ($causer != 0) {
$cdata = Contact::getPublicAndUserContactID($causer, $uid);
} else {
$cdata = [];
}
return bluesky_process_thread($data->thread, $uid, $fetch_uid, $cdata, $level, $last_poll);
}
function bluesky_fetch_post(string $uri, int $uid): string
{
if (Post::exists(['uri' => $uri, 'uid' => [$uid, 0]])) {
Logger::debug('Post exists', ['uri' => $uri]);
return $uri;
}
$reply = Post::selectFirst(['uri'], ['extid' => $uri, 'uid' => [$uid, 0]]);
if (!empty($reply['uri'])) {
Logger::debug('Post with extid exists', ['uri' => $uri]);
return $reply['uri'];
}
return '';
}
function bluesky_process_thread(stdClass $thread, int $uid, int $fetch_uid, array $cdata, int $level, int $last_poll): string
{
if (empty($thread->post)) {
Logger::info('Invalid post', ['post' => $thread]);
return '';
}
$uri = bluesky_get_uri($thread->post);
$fetched_uri = bluesky_fetch_post($uri, $uid);
if (empty($fetched_uri)) {
Logger::debug('Process missing post', ['uri' => $uri]);
$item = bluesky_get_header($thread->post, $uri, $uid, $uid);
$item = bluesky_get_content($item, $thread->post->record, $uri, $uid, $fetch_uid, $level, $last_poll);
if (!empty($item)) {
$item['post-reason'] = Item::PR_FETCHED;
if (!empty($cdata['public'])) {
$item['causer-id'] = $cdata['public'];
}
if (!empty($thread->post->embed)) {
$item = bluesky_add_media($thread->post->embed, $item, $uid, $level, $last_poll);
}
$id = Item::insert($item);
if (!$id) {
Logger::info('Item has not not been stored', ['uri' => $uri]);
return '';
}
Logger::debug('Stored item', ['id' => $id, 'uri' => $uri]);
} else {
Logger::info('Post has not not been fetched', ['uri' => $uri]);
return '';
}
} else {
Logger::debug('Post exists', ['uri' => $uri]);
$uri = $fetched_uri;
}
foreach ($thread->replies ?? [] as $reply) {
$reply_uri = bluesky_process_thread($reply, $uid, $fetch_uid, $cdata, $level, $last_poll);
Logger::debug('Reply has been processed', ['uri' => $uri, 'reply' => $reply_uri]);
}
return $uri;
}
function bluesky_get_contact(stdClass $author, int $uid, int $fetch_uid): array
{
$condition = ['network' => Protocol::BLUESKY, 'uid' => 0, 'url' => $author->did];
$contact = Contact::selectFirst(['id', 'updated'], $condition);
$update = empty($contact) || $contact['updated'] < DateTimeFormat::utc('now -24 hours');
$public_fields = $fields = bluesky_get_contact_fields($author, $fetch_uid, $update);
$public_fields['uid'] = 0;
$public_fields['rel'] = Contact::NOTHING;
if (empty($contact)) {
$cid = Contact::insert($public_fields);
} else {
$cid = $contact['id'];
Contact::update($public_fields, ['id' => $cid], true);
}
if ($uid != 0) {
$condition = ['network' => Protocol::BLUESKY, 'uid' => $uid, 'url' => $author->did];
$contact = Contact::selectFirst(['id', 'rel', 'uid'], $condition);
if (!isset($fields['rel']) && isset($contact['rel'])) {
$fields['rel'] = $contact['rel'];
} elseif (!isset($fields['rel'])) {
$fields['rel'] = Contact::NOTHING;
}
}
if (($uid != 0) && ($fields['rel'] != Contact::NOTHING)) {
if (empty($contact)) {
$cid = Contact::insert($fields);
} else {
$cid = $contact['id'];
Contact::update($fields, ['id' => $cid], true);
}
Logger::debug('Get user contact', ['id' => $cid, 'uid' => $uid, 'update' => $update]);
} else {
Logger::debug('Get public contact', ['id' => $cid, 'uid' => $uid, 'update' => $update]);
}
if (!empty($author->avatar)) {
Contact::updateAvatar($cid, $author->avatar);
}
return Contact::getById($cid);
}
function bluesky_get_contact_fields(stdClass $author, int $uid, bool $update): array
{
$fields = [
'uid' => $uid,
'network' => Protocol::BLUESKY,
'priority' => 1,
'writable' => true,
'blocked' => false,
'readonly' => false,
'pending' => false,
'url' => $author->did,
'nurl' => $author->did,
'alias' => BLUESKY_WEB . '/profile/' . $author->handle,
'name' => $author->displayName ?? $author->handle,
'nick' => $author->handle,
'addr' => $author->handle,
];
if (!$update) {
Logger::debug('Got contact fields', ['uid' => $uid, 'url' => $fields['url']]);
return $fields;
}
$fields['baseurl'] = bluesky_get_pds($author->did);
if (!empty($fields['baseurl'])) {
GServer::check($fields['baseurl'], Protocol::BLUESKY);
$fields['gsid'] = GServer::getID($fields['baseurl'], true);
}
$data = bluesky_xrpc_get($uid, 'app.bsky.actor.getProfile', ['actor' => $author->did]);
if (empty($data)) {
Logger::debug('Error fetching contact fields', ['uid' => $uid, 'url' => $fields['url']]);
return $fields;
}
$fields['updated'] = DateTimeFormat::utcNow(DateTimeFormat::MYSQL);
if (!empty($data->description)) {
$fields['about'] = HTML::toBBCode($data->description);
}
if (!empty($data->banner)) {
$fields['header'] = $data->banner;
}
if (!empty($data->viewer)) {
if (!empty($data->viewer->following) && !empty($data->viewer->followedBy)) {
$fields['rel'] = Contact::FRIEND;
} elseif (!empty($data->viewer->following) && empty($data->viewer->followedBy)) {
$fields['rel'] = Contact::SHARING;
} elseif (empty($data->viewer->following) && !empty($data->viewer->followedBy)) {
$fields['rel'] = Contact::FOLLOWER;
} else {
$fields['rel'] = Contact::NOTHING;
}
}
Logger::debug('Got updated contact fields', ['uid' => $uid, 'url' => $fields['url']]);
return $fields;
}
function bluesky_get_feeds(int $uid): array
{
$type = '$type';
$preferences = bluesky_get_preferences($uid);
foreach ($preferences->preferences as $preference) {
if ($preference->$type == 'app.bsky.actor.defs#savedFeedsPref') {
return $preference->pinned ?? [];
}
}
return [];
}
function bluesky_get_preferences(int $uid): stdClass
{
$cachekey = 'bluesky:preferences:' . $uid;
$data = DI::cache()->get($cachekey);
if (!is_null($data)) {
return $data;
}
$data = bluesky_xrpc_get($uid, 'app.bsky.actor.getPreferences');
DI::cache()->set($cachekey, $data, Duration::HOUR);
return $data;
}
function bluesky_get_did(string $handle): string
{
$data = bluesky_get(BLUESKY_PDS . '/xrpc/com.atproto.identity.resolveHandle?handle=' . urlencode($handle));
if (empty($data)) {
return '';
}
Logger::debug('Got DID', ['return' => $data]);
return $data->did;
}
function bluesky_get_user_pds(int $uid): string
{
$pds = DI::pConfig()->get($uid, 'bluesky', 'pds');
if (!empty($pds)) {
return $pds;
}
$did = DI::pConfig()->get($uid, 'bluesky', 'did');
if (empty($did)) {
Logger::notice('Empty did for user', ['uid' => $uid]);
return '';
}
$pds = bluesky_get_pds($did);
DI::pConfig()->set($uid, 'bluesky', 'pds', $pds);
return $pds;
}
function bluesky_get_pds(string $did): ?string
{
$data = bluesky_get(BLUESKY_DIRECTORY . '/' . $did);
if (empty($data) || empty($data->service)) {
return null;
}
foreach ($data->service as $service) {
if (($service->id == '#atproto_pds') && ($service->type == 'AtprotoPersonalDataServer') && !empty($service->serviceEndpoint)) {
return $service->serviceEndpoint;
}
}
return null;
}
function bluesky_get_token(int $uid): string
{
$token = DI::pConfig()->get($uid, 'bluesky', 'access_token');
$created = DI::pConfig()->get($uid, 'bluesky', 'token_created');
if (empty($token)) {
return '';
}
if ($created + 300 < time()) {
return bluesky_refresh_token($uid);
}
return $token;
}
function bluesky_refresh_token(int $uid): string
{
$token = DI::pConfig()->get($uid, 'bluesky', 'refresh_token');
$data = bluesky_post($uid, '/xrpc/com.atproto.server.refreshSession', '', ['Authorization' => ['Bearer ' . $token]]);
if (empty($data)) {
return '';
}
Logger::debug('Refreshed token', ['return' => $data]);
DI::pConfig()->set($uid, 'bluesky', 'access_token', $data->accessJwt);
DI::pConfig()->set($uid, 'bluesky', 'refresh_token', $data->refreshJwt);
DI::pConfig()->set($uid, 'bluesky', 'token_created', time());
return $data->accessJwt;
}
function bluesky_create_token(int $uid, string $password): string
{
$did = DI::pConfig()->get($uid, 'bluesky', 'did');
$data = bluesky_post($uid, '/xrpc/com.atproto.server.createSession', json_encode(['identifier' => $did, 'password' => $password]), ['Content-type' => 'application/json']);
if (empty($data)) {
DI::pConfig()->set($uid, 'bluesky', 'status', BLUEKSY_STATUS_TOKEN_FAIL);
return '';
}
Logger::debug('Created token', ['return' => $data]);
DI::pConfig()->set($uid, 'bluesky', 'access_token', $data->accessJwt);
DI::pConfig()->set($uid, 'bluesky', 'refresh_token', $data->refreshJwt);
DI::pConfig()->set($uid, 'bluesky', 'token_created', time());
DI::pConfig()->set($uid, 'bluesky', 'status', BLUEKSY_STATUS_TOKEN_OK);
return $data->accessJwt;
}
function bluesky_xrpc_post(int $uid, string $url, $parameters): ?stdClass
{
return bluesky_post($uid, '/xrpc/' . $url, json_encode($parameters), ['Content-type' => 'application/json', 'Authorization' => ['Bearer ' . bluesky_get_token($uid)]]);
}
function bluesky_post(int $uid, string $url, string $params, array $headers): ?stdClass
{
try {
$curlResult = DI::httpClient()->post(bluesky_get_user_pds($uid) . $url, $params, $headers);
} catch (\Exception $e) {
Logger::notice('Exception on post', ['exception' => $e]);
DI::pConfig()->set($uid, 'bluesky', 'status', BLUEKSY_STATUS_API_FAIL);
return null;
}
if (!$curlResult->isSuccess()) {
Logger::notice('API Error', ['error' => json_decode($curlResult->getBody()) ?: $curlResult->getBody()]);
DI::pConfig()->set($uid, 'bluesky', 'status', BLUEKSY_STATUS_API_FAIL);
return null;
}
DI::pConfig()->set($uid, 'bluesky', 'status', BLUEKSY_STATUS_SUCCESS);
return json_decode($curlResult->getBody());
}
function bluesky_xrpc_get(int $uid, string $url, array $parameters = []): ?stdClass
{
if (!empty($parameters)) {
$url .= '?' . http_build_query($parameters);
}
$data = bluesky_get(bluesky_get_user_pds($uid) . '/xrpc/' . $url, HttpClientAccept::JSON, [HttpClientOptions::HEADERS => ['Authorization' => ['Bearer ' . bluesky_get_token($uid)]]]);
DI::pConfig()->set($uid, 'bluesky', 'status', is_null($data) ? BLUEKSY_STATUS_API_FAIL : BLUEKSY_STATUS_SUCCESS);
return $data;
}
function bluesky_get(string $url, string $accept_content = HttpClientAccept::DEFAULT, array $opts = []): ?stdClass
{
try {
$curlResult = DI::httpClient()->get($url, $accept_content, $opts);
} catch (\Exception $e) {
Logger::notice('Exception on get', ['exception' => $e]);
return null;
}
if (!$curlResult->isSuccess()) {
Logger::notice('API Error', ['error' => json_decode($curlResult->getBody()) ?: $curlResult->getBody()]);
return null;
}
return json_decode($curlResult->getBody());
}

16
bluesky/bluesky_feed.php Normal file
View file

@ -0,0 +1,16 @@
<?php
use Friendica\Core\Logger;
function bluesky_feed_run($argv, $argc)
{
require_once 'addon/bluesky/bluesky.php';
if ($argc != 4) {
return;
}
Logger::debug('Importing feed - start', ['user' => $argv[1], 'feed' => $argv[2], 'last_poll' => $argv[3]]);
bluesky_fetch_feed($argv[1], $argv[2], $argv[3]);
Logger::debug('Importing feed - done', ['user' => $argv[1], 'feed' => $argv[2], 'last_poll' => $argv[3]]);
}

View file

@ -0,0 +1,16 @@
<?php
use Friendica\Core\Logger;
function bluesky_notifications_run($argv, $argc)
{
require_once 'addon/bluesky/bluesky.php';
if ($argc != 3) {
return;
}
Logger::notice('importing notifications - start', ['user' => $argv[1], 'last_poll' => $argv[2]]);
bluesky_fetch_notifications($argv[1], $argv[2]);
Logger::notice('importing notifications - done', ['user' => $argv[1], 'last_poll' => $argv[2]]);
}

View file

@ -0,0 +1,16 @@
<?php
use Friendica\Core\Logger;
function bluesky_timeline_run($argv, $argc)
{
require_once 'addon/bluesky/bluesky.php';
if ($argc != 3) {
return;
}
Logger::notice('importing timeline - start', ['user' => $argv[1], 'last_poll' => $argv[2]]);
bluesky_fetch_timeline($argv[1], $argv[2]);
Logger::notice('importing timeline - done', ['user' => $argv[1], 'last_poll' => $argv[2]]);
}

116
bluesky/lang/C/messages.po Normal file
View file

@ -0,0 +1,116 @@
# ADDON bluesky
# Copyright (C)
# This file is distributed under the same license as the Friendica bluesky addon package.
#
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-12-06 06:30+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: bluesky.php:336
msgid "Enable Bluesky Post Addon"
msgstr ""
#: bluesky.php:337
msgid "Post to Bluesky by default"
msgstr ""
#: bluesky.php:338
msgid "Import the remote timeline"
msgstr ""
#: bluesky.php:339
msgid "Import the pinned feeds"
msgstr ""
#: bluesky.php:339
msgid ""
"When activated, Posts will be imported from all the feeds that you pinned in "
"Bluesky."
msgstr ""
#: bluesky.php:340
msgid "Personal Data Server"
msgstr ""
#: bluesky.php:340
msgid "The personal data server (PDS) is the system that hosts your profile."
msgstr ""
#: bluesky.php:341
msgid "Bluesky handle"
msgstr ""
#: bluesky.php:342
msgid "Bluesky DID"
msgstr ""
#: bluesky.php:342
msgid ""
"This is the unique identifier. It will be fetched automatically, when the "
"handle is entered."
msgstr ""
#: bluesky.php:343
msgid "Bluesky app password"
msgstr ""
#: bluesky.php:343
msgid ""
"Please don't add your real password here, but instead create a specific app "
"password in the Bluesky settings."
msgstr ""
#: bluesky.php:349
msgid "Bluesky Import/Export"
msgstr ""
#: bluesky.php:359
msgid ""
"You are not authenticated. Please enter your handle and the app password."
msgstr ""
#: bluesky.php:379
msgid ""
"You are authenticated to Bluesky. For security reasons the password isn't "
"stored."
msgstr ""
#: bluesky.php:381
msgid ""
"The communication with the personal data server service (PDS) is established."
msgstr ""
#: bluesky.php:383
msgid "Communication issues with the personal data server service (PDS)."
msgstr ""
#: bluesky.php:385
msgid ""
"The DID for the provided handle could not be detected. Please check if you "
"entered the correct handle."
msgstr ""
#: bluesky.php:387
msgid "The personal data server service (PDS) could not be detected."
msgstr ""
#: bluesky.php:389
msgid ""
"The authentication with the provided handle and password failed. Please "
"check if you entered the correct password."
msgstr ""
#: bluesky.php:457
msgid "Post to Bluesky"
msgstr ""

View file

@ -0,0 +1,89 @@
# ADDON bluesky
# Copyright (C)
# This file is distributed under the same license as the Friendica bluesky addon package.
#
#
# Translators:
# Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2023
# haheute <haheute@posteo.de>, 2023
# Raroun, 2023
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-05-24 05:52+0000\n"
"PO-Revision-Date: 2023-05-24 06:02+0000\n"
"Last-Translator: Raroun, 2023\n"
"Language-Team: German (https://app.transifex.com/Friendica/teams/12172/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: bluesky.php:100
msgid ""
"You are authenticated to Bluesky. For security reasons the password isn't "
"stored."
msgstr ""
"Du bist auf Bluesky authentifiziert. Aus Sicherheitsgründen wird das "
"Passwort nicht gespeichert."
#: bluesky.php:100
msgid "You are not authenticated. Please enter the app password."
msgstr ""
"Du bist derzeit nicht authentifiziert. Bitte gib dein App Passwort ein."
#: bluesky.php:104
msgid "Enable Bluesky Post Addon"
msgstr "Bluesky Post Addon aktivieren"
#: bluesky.php:105
msgid "Post to Bluesky by default"
msgstr "Standardmäßig auf Bluesky veröffentlichen"
#: bluesky.php:106
msgid "Import the remote timeline"
msgstr "Importiere die entfernte Timeline"
#: bluesky.php:107
msgid "Bluesky host"
msgstr "Bluesky Host"
#: bluesky.php:108
msgid "Bluesky handle"
msgstr "Bluesky Handle"
#: bluesky.php:109
msgid "Bluesky DID"
msgstr "Bluesky DID"
#: bluesky.php:109
msgid ""
"This is the unique identifier. It will be fetched automatically, when the "
"handle is entered."
msgstr ""
"Sobald das Handle eingegeben ist, wird diese einzigartige Kennung "
"automatisch abgerufen."
#: bluesky.php:110
msgid "Bluesky app password"
msgstr "Bluesky App Passwort"
#: bluesky.php:110
msgid ""
"Please don't add your real password here, but instead create a specific app "
"password in the Bluesky settings."
msgstr ""
"Bitte verwende hier nicht dein echtes Passwort, sondern stattdessen ein "
"speziell für diese App in den Bluesky Einstellungen festgelegtes Passwort."
#: bluesky.php:116
msgid "Bluesky Import/Export"
msgstr "Bluesky Import/Export"
#: bluesky.php:167
msgid "Post to Bluesky"
msgstr "Auf Bluesky veröffentlichen"

View file

@ -0,0 +1,20 @@
<?php
if(! function_exists("string_plural_select_de")) {
function string_plural_select_de($n){
$n = intval($n);
return intval($n != 1);
}}
$a->strings['You are authenticated to Bluesky. For security reasons the password isn\'t stored.'] = 'Du bist auf Bluesky authentifiziert. Aus Sicherheitsgründen wird das Passwort nicht gespeichert.';
$a->strings['You are not authenticated. Please enter the app password.'] = 'Du bist derzeit nicht authentifiziert. Bitte gib dein App Passwort ein.';
$a->strings['Enable Bluesky Post Addon'] = 'Bluesky Post Addon aktivieren';
$a->strings['Post to Bluesky by default'] = 'Standardmäßig auf Bluesky veröffentlichen';
$a->strings['Import the remote timeline'] = 'Importiere die entfernte Timeline';
$a->strings['Bluesky host'] = 'Bluesky Host';
$a->strings['Bluesky handle'] = 'Bluesky Handle';
$a->strings['Bluesky DID'] = 'Bluesky DID';
$a->strings['This is the unique identifier. It will be fetched automatically, when the handle is entered.'] = 'Sobald das Handle eingegeben ist, wird diese einzigartige Kennung automatisch abgerufen.';
$a->strings['Bluesky app password'] = 'Bluesky App Passwort';
$a->strings['Please don\'t add your real password here, but instead create a specific app password in the Bluesky settings.'] = 'Bitte verwende hier nicht dein echtes Passwort, sondern stattdessen ein speziell für diese App in den Bluesky Einstellungen festgelegtes Passwort.';
$a->strings['Bluesky Import/Export'] = 'Bluesky Import/Export';
$a->strings['Post to Bluesky'] = 'Auf Bluesky veröffentlichen';

View file

@ -0,0 +1,80 @@
# ADDON bluesky
# Copyright (C)
# This file is distributed under the same license as the Friendica bluesky addon package.
#
#
# Translators:
# tslmuun, 2023
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-05-24 05:52+0000\n"
"PO-Revision-Date: 2023-05-24 06:02+0000\n"
"Last-Translator: tslmuun, 2023\n"
"Language-Team: Chinese (China) (https://app.transifex.com/Friendica/teams/12172/zh_CN/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: zh_CN\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: bluesky.php:100
msgid ""
"You are authenticated to Bluesky. For security reasons the password isn't "
"stored."
msgstr "您已通过 Bluesky 的身份验证。 出于安全原因,不存储密码。"
#: bluesky.php:100
msgid "You are not authenticated. Please enter the app password."
msgstr "您未通过身份验证。 请输入应用密码。"
#: bluesky.php:104
msgid "Enable Bluesky Post Addon"
msgstr "启用Bluesky插件"
#: bluesky.php:105
msgid "Post to Bluesky by default"
msgstr "默认发布到Bluesky"
#: bluesky.php:106
msgid "Import the remote timeline"
msgstr "导入远程时间线"
#: bluesky.php:107
msgid "Bluesky host"
msgstr "Bluesky地址"
#: bluesky.php:108
msgid "Bluesky handle"
msgstr "Bluesky handle"
#: bluesky.php:109
msgid "Bluesky DID"
msgstr "Bluesky DID"
#: bluesky.php:109
msgid ""
"This is the unique identifier. It will be fetched automatically, when the "
"handle is entered."
msgstr "这是唯一标识符。 输入句柄时,它将自动获取。"
#: bluesky.php:110
msgid "Bluesky app password"
msgstr "Bluesky 应用密码"
#: bluesky.php:110
msgid ""
"Please don't add your real password here, but instead create a specific app "
"password in the Bluesky settings."
msgstr "请不要在此处填写您的真实密码,而是在 Bluesky 设置中创建一个特定的应用程序密码。"
#: bluesky.php:116
msgid "Bluesky Import/Export"
msgstr "Bluesky 导入/导出"
#: bluesky.php:167
msgid "Post to Bluesky"
msgstr "发布到Bluesky"

View file

@ -0,0 +1,20 @@
<?php
if(! function_exists("string_plural_select_zh_cn")) {
function string_plural_select_zh_cn($n){
$n = intval($n);
return intval(0);
}}
$a->strings['You are authenticated to Bluesky. For security reasons the password isn\'t stored.'] = '您已通过 Bluesky 的身份验证。 出于安全原因,不存储密码。';
$a->strings['You are not authenticated. Please enter the app password.'] = '您未通过身份验证。 请输入应用密码。';
$a->strings['Enable Bluesky Post Addon'] = '启用Bluesky插件';
$a->strings['Post to Bluesky by default'] = '默认发布到Bluesky';
$a->strings['Import the remote timeline'] = '导入远程时间线';
$a->strings['Bluesky host'] = 'Bluesky地址';
$a->strings['Bluesky handle'] = 'Bluesky handle';
$a->strings['Bluesky DID'] = 'Bluesky DID';
$a->strings['This is the unique identifier. It will be fetched automatically, when the handle is entered.'] = '这是唯一标识符。 输入句柄时,它将自动获取。';
$a->strings['Bluesky app password'] = 'Bluesky 应用密码';
$a->strings['Please don\'t add your real password here, but instead create a specific app password in the Bluesky settings.'] = '请不要在此处填写您的真实密码,而是在 Bluesky 设置中创建一个特定的应用程序密码。';
$a->strings['Bluesky Import/Export'] = 'Bluesky 导入/导出';
$a->strings['Post to Bluesky'] = '发布到Bluesky';

View file

@ -0,0 +1,9 @@
<p>{{$status}}</p>
{{include file="field_checkbox.tpl" field=$enable}}
{{include file="field_checkbox.tpl" field=$bydefault}}
{{include file="field_checkbox.tpl" field=$import}}
{{include file="field_checkbox.tpl" field=$import_feeds}}
{{include file="field_input.tpl" field=$pds}}
{{include file="field_input.tpl" field=$handle}}
{{include file="field_input.tpl" field=$did}}
{{include file="field_input.tpl" field=$password}}

View file

@ -4,21 +4,21 @@
#
#
# Translators:
# Michal Šupler <msupler@gmail.com>, 2014
# michal_s <msupler@gmail.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-06-22 13:18+0200\n"
"PO-Revision-Date: 2014-07-07 18:27+0000\n"
"Last-Translator: Michal Šupler <msupler@gmail.com>\n"
"Language-Team: Czech (http://www.transifex.com/projects/p/friendica/language/cs/)\n"
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
"PO-Revision-Date: 2014-06-22 11:27+0000\n"
"Last-Translator: michal_s <msupler@gmail.com>, 2014\n"
"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: cs\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
#: buglink.php:15
#: buglink.php:20
msgid "Report Bug"
msgstr "Nahlásit chybu"

View file

@ -3,6 +3,6 @@
if(! function_exists("string_plural_select_cs")) {
function string_plural_select_cs($n){
$n = intval($n);
if (($n==1)) { return 0; } else if (($n>=2 && $n<=4)) { return 1; } else { return 2; }
if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; }
}}
$a->strings['Report Bug'] = 'Nahlásit chybu';

View file

@ -10,16 +10,16 @@ msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-06-22 13:18+0200\n"
"PO-Revision-Date: 2019-11-10 20:12+0000\n"
"Last-Translator: René Wagner <apollo@rw-net.de>\n"
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
"PO-Revision-Date: 2014-06-22 11:27+0000\n"
"Last-Translator: René Wagner <apollo@rw-net.de>, 2019\n"
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: buglink.php:15
#: buglink.php:20
msgid "Report Bug"
msgstr "Fehler melden"

View file

@ -70,7 +70,7 @@ function catavatar_addon_settings_post(&$s)
}
if (!empty($_POST['catavatar-usecat'])) {
$url = DI::baseUrl()->get() . '/catavatar/' . DI::userSession()->getLocalUserId() . '?ts=' . time();
$url = DI::baseUrl() . '/catavatar/' . DI::userSession()->getLocalUserId() . '?ts=' . time();
$self = DBA::selectFirst('contact', ['id'], ['uid' => DI::userSession()->getLocalUserId(), 'self' => true]);
if (!DBA::isResult($self)) {
@ -121,9 +121,9 @@ function catavatar_lookup(array &$b)
{
$user = DBA::selectFirst('user', ['uid'], ['email' => $b['email']]);
if (DBA::isResult($user)) {
$url = DI::baseUrl()->get() . '/catavatar/' . $user['uid'];
$url = DI::baseUrl() . '/catavatar/' . $user['uid'];
} else {
$url = DI::baseUrl()->get() . '/catavatar/' . md5(trim(strtolower($b['email'])));
$url = DI::baseUrl() . '/catavatar/' . md5(trim(strtolower($b['email'])));
}
switch($b['size']) {

View file

@ -15,7 +15,7 @@ msgstr ""
"POT-Creation-Date: 2021-11-21 19:14-0500\n"
"PO-Revision-Date: 2018-04-07 05:23+0000\n"
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2022\n"
"Language-Team: German (https://www.transifex.com/Friendica/teams/12172/de/)\n"
"Language-Team: German (https://app.transifex.com/Friendica/teams/12172/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -5,8 +5,7 @@
#
# Translators:
# Vladimir Núñez <lapoubelle111@gmail.com>, 2019
# Walter Bulbazor, 2021
# Hypolite Petovan <hypolite@mrpetovan.com>, 2022
# Florent C., 2023
#
#, fuzzy
msgid ""
@ -15,8 +14,8 @@ msgstr ""
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-11-21 19:14-0500\n"
"PO-Revision-Date: 2018-04-07 05:23+0000\n"
"Last-Translator: Hypolite Petovan <hypolite@mrpetovan.com>, 2022\n"
"Language-Team: French (https://www.transifex.com/Friendica/teams/12172/fr/)\n"
"Last-Translator: Florent C., 2023\n"
"Language-Team: French (https://app.transifex.com/Friendica/teams/12172/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@ -25,7 +24,7 @@ msgstr ""
#: catavatar.php:48
msgid "Set default profile avatar or randomize the cat."
msgstr "Mettre l'avatar par défaut ou tirer au sort le Chat."
msgstr "Mettre l'avatar par défaut ou tirer au sort le chat."
#: catavatar.php:53
msgid "Cat Avatar Settings"
@ -33,15 +32,15 @@ msgstr "Paramètres de Chat avatar"
#: catavatar.php:56
msgid "Use Cat as Avatar"
msgstr "Utiliser Chat comme avatar"
msgstr "Utiliser ce Chat"
#: catavatar.php:57
msgid "Another random Cat!"
msgstr "Un autre chat aléatoire !"
msgstr "Un autre Chat aléatoire !"
#: catavatar.php:58
msgid "Reset to email Cat"
msgstr "Réinitialiser à Chat courriel"
msgstr "Revenir au Chat par défaut"
#: catavatar.php:77
msgid "The cat hadn't found itself."

View file

@ -5,11 +5,11 @@ function string_plural_select_fr($n){
$n = intval($n);
if (($n == 0 || $n == 1)) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; }
}}
$a->strings['Set default profile avatar or randomize the cat.'] = 'Mettre l\'avatar par défaut ou tirer au sort le Chat.';
$a->strings['Set default profile avatar or randomize the cat.'] = 'Mettre l\'avatar par défaut ou tirer au sort le chat.';
$a->strings['Cat Avatar Settings'] = 'Paramètres de Chat avatar';
$a->strings['Use Cat as Avatar'] = 'Utiliser Chat comme avatar';
$a->strings['Another random Cat!'] = 'Un autre chat aléatoire !';
$a->strings['Reset to email Cat'] = 'Réinitialiser à Chat courriel';
$a->strings['Use Cat as Avatar'] = 'Utiliser ce Chat';
$a->strings['Another random Cat!'] = 'Un autre Chat aléatoire !';
$a->strings['Reset to email Cat'] = 'Revenir au Chat par défaut';
$a->strings['The cat hadn\'t found itself.'] = 'Le Chat ne s\'y est pas retrouvé';
$a->strings['There was an error, the cat ran away.'] = 'Il y a eu une erreur et le chat s\'est enfui';
$a->strings['Profile Photos'] = 'Photos de profil';

View file

@ -0,0 +1,64 @@
<?php
/**
* Name: Circle Text
* Description: Disable images in circle edit menu
* Version: 1.0
* Author: Thomas Willingham <https://kakste.com/profile/beardyunixer>
*/
use Friendica\Core\Hook;
use Friendica\Core\Renderer;
use Friendica\DI;
function circle_text_install()
{
Hook::register('addon_settings', __FILE__, 'circle_text_settings');
Hook::register('addon_settings_post', __FILE__, 'circle_text_settings_post');
}
/**
*
* Callback from the settings post function.
* $post contains the $_POST array.
* We will make sure we've got a valid user account
* and if so set our configuration setting for this person.
*
*/
function circle_text_settings_post(array $post)
{
if (!DI::userSession()->getLocalUserId() || empty($post['circle_text-submit'])) {
return;
}
DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'system', 'circle_edit_image_limit', intval($post['circle_text']));
}
/**
*
* Called from the Addon Setting form.
* Add our own settings info to the page.
*
*/
function circle_text_settings(array &$data)
{
if (!DI::userSession()->getLocalUserId()) {
return;
}
$enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'system', 'circle_edit_image_limit') ??
DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'system', 'groupedit_image_limit');
$t = Renderer::getMarkupTemplate('settings.tpl', 'addon/circle_text/');
$html = Renderer::replaceMacros($t, [
'$enabled' => ['circle_text', DI::l10n()->t('Use a text only (non-image) circle selector in the "circle edit" menu'), $enabled],
]);
$data = [
'addon' => 'circle_text',
'title' => DI::l10n()->t('Circle Text'),
'html' => $html,
];
}

View file

@ -0,0 +1,26 @@
# ADDON circle_text
# Copyright (C)
# This file is distributed under the same license as the Friendica circle_text addon package.
#
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-06-03 15:48-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: group_text.php:56
msgid "Use a text only (non-image) circle selector in the \"circle edit\" menu"
msgstr ""
#: group_text.php:61
msgid "Circle Text"
msgstr ""

View file

@ -0,0 +1,32 @@
# ADDON group_text
# Copyright (C)
# This file is distributed under the same license as the Friendica group_text addon package.
#
#
# Translators:
# Farida Khalaf <faridakhalaf@hotmail.com>, 2021
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
"PO-Revision-Date: 2021-02-21 02:59+0000\n"
"Last-Translator: Farida Khalaf <faridakhalaf@hotmail.com>\n"
"Language-Team: Arabic (http://www.transifex.com/Friendica/friendica/language/ar/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ar\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
#: group_text.php:62
msgid "Group Text"
msgstr "نص المجموعة:"
#: group_text.php:64
msgid "Use a text only (non-image) group selector in the \"group edit\" menu"
msgstr "استخدم محدد نصي للمجموعة فقط (غير مصور) في قائمة \"تعديل المجموعة\""
#: group_text.php:70
msgid "Save Settings"
msgstr "حفظ الإعدادات"

View file

@ -0,0 +1,10 @@
<?php
if(! function_exists("string_plural_select_ar")) {
function string_plural_select_ar($n){
$n = intval($n);
if ($n==0) { return 0; } else if ($n==1) { return 1; } else if ($n==2) { return 2; } else if ($n%100>=3 && $n%100<=10) { return 3; } else if ($n%100>=11 && $n%100<=99) { return 4; } else { return 5; }
}}
$a->strings['Group Text'] = 'نص المجموعة:';
$a->strings['Use a text only (non-image) group selector in the "group edit" menu'] = 'استخدم محدد نصي للمجموعة فقط (غير مصور) في قائمة "تعديل المجموعة"';
$a->strings['Save Settings'] = 'حفظ الإعدادات';

View file

@ -0,0 +1,36 @@
# ADDON group_text
# Copyright (C)
# This file is distributed under the same license as the Friendica group_text addon package.
#
#
# Translators:
# Joan Bar <friendica@tutanota.com>, 2019
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-02-27 05:01-0500\n"
"PO-Revision-Date: 2019-10-14 00:45+0000\n"
"Last-Translator: Joan Bar <friendica@tutanota.com>\n"
"Language-Team: Catalan (http://www.transifex.com/Friendica/friendica/language/ca/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ca\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: group_text.php:46
msgid "Group Text settings updated."
msgstr "La configuració del text del grup s'ha actualitzat."
#: group_text.php:76
msgid "Group Text"
msgstr "Missatge del grup"
#: group_text.php:78
msgid "Use a text only (non-image) group selector in the \"group edit\" menu"
msgstr "Utilitzeu un selector de grup de només text (que no sigui una imatge) al menú 'Edita grup'"
#: group_text.php:84
msgid "Submit"
msgstr "sotmetre's"

View file

@ -0,0 +1,11 @@
<?php
if(! function_exists("string_plural_select_ca")) {
function string_plural_select_ca($n){
$n = intval($n);
return intval($n != 1);
}}
$a->strings['Group Text settings updated.'] = 'La configuració del text del grup s\'ha actualitzat.';
$a->strings['Group Text'] = 'Missatge del grup';
$a->strings['Use a text only (non-image) group selector in the "group edit" menu'] = 'Utilitzeu un selector de grup de només text (que no sigui una imatge) al menú \'Edita grup\'';
$a->strings['Submit'] = 'sotmetre\'s';

View file

@ -0,0 +1,37 @@
# ADDON group_text
# Copyright (C)
# This file is distributed under the same license as the Friendica group_text addon package.
#
#
# Translators:
# Aditoo, 2018
# michal_s <msupler@gmail.com>, 2014-2015
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-02-27 05:01-0500\n"
"PO-Revision-Date: 2018-09-12 09:47+0000\n"
"Last-Translator: Aditoo\n"
"Language-Team: Czech (http://www.transifex.com/Friendica/friendica/language/cs/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: cs\n"
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
#: group_text.php:46
msgid "Group Text settings updated."
msgstr "Nastavení Group Text aktualizována."
#: group_text.php:76
msgid "Group Text"
msgstr "Skupinový text"
#: group_text.php:78
msgid "Use a text only (non-image) group selector in the \"group edit\" menu"
msgstr "Použijte pouze textový (bezobrázkový) výběr skupiny v menu úpravy skupin."
#: group_text.php:84
msgid "Submit"
msgstr "Odeslat"

View file

@ -0,0 +1,11 @@
<?php
if(! function_exists("string_plural_select_cs")) {
function string_plural_select_cs($n){
$n = intval($n);
if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; }
}}
$a->strings['Group Text settings updated.'] = 'Nastavení Group Text aktualizována.';
$a->strings['Group Text'] = 'Skupinový text';
$a->strings['Use a text only (non-image) group selector in the "group edit" menu'] = 'Použijte pouze textový (bezobrázkový) výběr skupiny v menu úpravy skupin.';
$a->strings['Submit'] = 'Odeslat';

View file

@ -0,0 +1,28 @@
# ADDON group_text
# Copyright (C)
# This file is distributed under the same license as the Friendica group_text addon package.
#
#
# Translators:
# Anton <dev@atjn.dk>, 2022
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-11-21 19:14-0500\n"
"PO-Revision-Date: 2014-06-23 08:35+0000\n"
"Last-Translator: Anton <dev@atjn.dk>, 2022\n"
"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: da_DK\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: group_text.php:58
msgid "Use a text only (non-image) group selector in the \"group edit\" menu"
msgstr "Brug en kun-tekst (intet billede) gruppevælger i grupperedigeringsmenuen"
#: group_text.php:63
msgid "Group Text"
msgstr "Gruppebesked"

View file

@ -0,0 +1,9 @@
<?php
if(! function_exists("string_plural_select_da_dk")) {
function string_plural_select_da_dk($n){
$n = intval($n);
return intval($n != 1);
}}
$a->strings['Use a text only (non-image) group selector in the "group edit" menu'] = 'Brug en kun-tekst (intet billede) gruppevælger i grupperedigeringsmenuen';
$a->strings['Group Text'] = 'Gruppebesked';

View file

@ -0,0 +1,31 @@
# ADDON group_text
# Copyright (C)
# This file is distributed under the same license as the Friendica group_text addon package.
#
#
# Translators:
# Andreas H., 2014
# Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2014
# Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2021
# Ulf Rompe <transifex.com@rompe.org>, 2019
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-11-21 19:14-0500\n"
"PO-Revision-Date: 2014-06-23 08:35+0000\n"
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2021\n"
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: group_text.php:58
msgid "Use a text only (non-image) group selector in the \"group edit\" menu"
msgstr "Beim Bearbeiten von Gruppen Text statt Bilder anzeigen"
#: group_text.php:63
msgid "Group Text"
msgstr "Gruppen als Text"

View file

@ -0,0 +1,9 @@
<?php
if(! function_exists("string_plural_select_de")) {
function string_plural_select_de($n){
$n = intval($n);
return intval($n != 1);
}}
$a->strings['Use a text only (non-image) group selector in the "group edit" menu'] = 'Beim Bearbeiten von Gruppen Text statt Bilder anzeigen';
$a->strings['Group Text'] = 'Gruppen als Text';

View file

@ -0,0 +1,5 @@
<?php
$a->strings["Group Text"] = "";
$a->strings["Use a text only (non-image) group selector in the \"group edit\" menu"] = "";
$a->strings["Submit"] = "Sendi";

View file

@ -0,0 +1,33 @@
# ADDON group_text
# Copyright (C)
# This file is distributed under the same license as the Friendica group_text addon package.
#
#
# Translators:
# Albert, 2016
# Senex Petrovic <javierruizo@hotmail.com>, 2021
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
"PO-Revision-Date: 2021-04-01 09:56+0000\n"
"Last-Translator: Senex Petrovic <javierruizo@hotmail.com>\n"
"Language-Team: Spanish (http://www.transifex.com/Friendica/friendica/language/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: group_text.php:62
msgid "Group Text"
msgstr "Grupo de Texto"
#: group_text.php:64
msgid "Use a text only (non-image) group selector in the \"group edit\" menu"
msgstr "Utilice sólo el selector de grupo de texto (no imagen) en el menú \"edición de grupo\""
#: group_text.php:70
msgid "Save Settings"
msgstr "Guardar Ajustes"

View file

@ -0,0 +1,10 @@
<?php
if(! function_exists("string_plural_select_es")) {
function string_plural_select_es($n){
$n = intval($n);
return intval($n != 1);
}}
$a->strings['Group Text'] = 'Grupo de Texto';
$a->strings['Use a text only (non-image) group selector in the "group edit" menu'] = 'Utilice sólo el selector de grupo de texto (no imagen) en el menú "edición de grupo"';
$a->strings['Save Settings'] = 'Guardar Ajustes';

View file

@ -0,0 +1,37 @@
# ADDON group_text
# Copyright (C)
# This file is distributed under the same license as the Friendica group_text addon package.
#
#
# Translators:
# Kris, 2018
# Kris, 2018
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-02-27 05:01-0500\n"
"PO-Revision-Date: 2018-04-08 15:51+0000\n"
"Last-Translator: Kris\n"
"Language-Team: Finnish (Finland) (http://www.transifex.com/Friendica/friendica/language/fi_FI/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: fi_FI\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: group_text.php:46
msgid "Group Text settings updated."
msgstr "Group Text -asetukset päivitetty."
#: group_text.php:76
msgid "Group Text"
msgstr "Group Text"
#: group_text.php:78
msgid "Use a text only (non-image) group selector in the \"group edit\" menu"
msgstr ""
#: group_text.php:84
msgid "Submit"
msgstr "Lähetä"

View file

@ -0,0 +1,10 @@
<?php
if(! function_exists("string_plural_select_fi_fi")) {
function string_plural_select_fi_fi($n){
$n = intval($n);
return intval($n != 1);
}}
$a->strings['Group Text settings updated.'] = 'Group Text -asetukset päivitetty.';
$a->strings['Group Text'] = 'Group Text';
$a->strings['Submit'] = 'Lähetä';

View file

@ -0,0 +1,29 @@
# ADDON group_text
# Copyright (C)
# This file is distributed under the same license as the Friendica group_text addon package.
#
#
# Translators:
# bob lebonche <lebonche@tutanota.com>, 2021
# Hypolite Petovan <hypolite@mrpetovan.com>, 2016
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-11-21 19:14-0500\n"
"PO-Revision-Date: 2014-06-23 08:35+0000\n"
"Last-Translator: bob lebonche <lebonche@tutanota.com>, 2021\n"
"Language-Team: French (http://www.transifex.com/Friendica/friendica/language/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: fr\n"
"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
#: group_text.php:58
msgid "Use a text only (non-image) group selector in the \"group edit\" menu"
msgstr "Utiliser uniquement un groupe de texte (pas d'image) dans le menu \"groupedit\""
#: group_text.php:63
msgid "Group Text"
msgstr "Groupe de texte"

View file

@ -0,0 +1,9 @@
<?php
if(! function_exists("string_plural_select_fr")) {
function string_plural_select_fr($n){
$n = intval($n);
if (($n == 0 || $n == 1)) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; }
}}
$a->strings['Use a text only (non-image) group selector in the "group edit" menu'] = 'Utiliser uniquement un groupe de texte (pas d\'image) dans le menu "groupedit"';
$a->strings['Group Text'] = 'Groupe de texte';

View file

@ -0,0 +1,28 @@
# ADDON group_text
# Copyright (C)
# This file is distributed under the same license as the Friendica group_text addon package.
#
#
# Translators:
# Balázs Úr, 2020-2021
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-11-21 19:14-0500\n"
"PO-Revision-Date: 2014-06-23 08:35+0000\n"
"Last-Translator: Balázs Úr, 2020-2021\n"
"Language-Team: Hungarian (http://www.transifex.com/Friendica/friendica/language/hu/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: hu\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: group_text.php:58
msgid "Use a text only (non-image) group selector in the \"group edit\" menu"
msgstr "Csak szöveges (kép nélküli) csoportválasztó használata a „csoportszerkesztés” menüben"
#: group_text.php:63
msgid "Group Text"
msgstr "Csoportszöveg"

View file

@ -0,0 +1,9 @@
<?php
if(! function_exists("string_plural_select_hu")) {
function string_plural_select_hu($n){
$n = intval($n);
return intval($n != 1);
}}
$a->strings['Use a text only (non-image) group selector in the "group edit" menu'] = 'Csak szöveges (kép nélküli) csoportválasztó használata a „csoportszerkesztés” menüben';
$a->strings['Group Text'] = 'Csoportszöveg';

View file

@ -0,0 +1,5 @@
<?php
$a->strings["Group Text"] = "";
$a->strings["Use a text only (non-image) group selector in the \"group edit\" menu"] = "";
$a->strings["Submit"] = "Senda inn";

View file

@ -0,0 +1,33 @@
# ADDON group_text
# Copyright (C)
# This file is distributed under the same license as the Friendica group_text addon package.
#
#
# Translators:
# fabrixxm <fabrix.xm@gmail.com>, 2014-2015
# Sylke Vicious <silkevicious@gmail.com>, 2021
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
"PO-Revision-Date: 2021-02-16 12:48+0000\n"
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>\n"
"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: group_text.php:62
msgid "Group Text"
msgstr "Editor Gruppi Testuale"
#: group_text.php:64
msgid "Use a text only (non-image) group selector in the \"group edit\" menu"
msgstr "Usa un selettore testuale (senza immagini) nella pagina \"modifica gruppo\""
#: group_text.php:70
msgid "Save Settings"
msgstr "Salva Impostazioni"

View file

@ -0,0 +1,10 @@
<?php
if(! function_exists("string_plural_select_it")) {
function string_plural_select_it($n){
$n = intval($n);
return intval($n != 1);
}}
$a->strings['Group Text'] = 'Editor Gruppi Testuale';
$a->strings['Use a text only (non-image) group selector in the "group edit" menu'] = 'Usa un selettore testuale (senza immagini) nella pagina "modifica gruppo"';
$a->strings['Save Settings'] = 'Salva Impostazioni';

View file

@ -0,0 +1,5 @@
<?php
$a->strings["Group Text"] = "";
$a->strings["Use a text only (non-image) group selector in the \"group edit\" menu"] = "";
$a->strings["Submit"] = "Lagre";

View file

@ -0,0 +1,36 @@
# ADDON group_text
# Copyright (C)
# This file is distributed under the same license as the Friendica group_text addon package.
#
#
# Translators:
# Jeroen De Meerleer <me@jeroened.be>, 2018
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-02-27 05:01-0500\n"
"PO-Revision-Date: 2018-08-24 13:48+0000\n"
"Last-Translator: Jeroen De Meerleer <me@jeroened.be>\n"
"Language-Team: Dutch (http://www.transifex.com/Friendica/friendica/language/nl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: nl\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: group_text.php:46
msgid "Group Text settings updated."
msgstr "Groupsberichten instellingen opgeslagen"
#: group_text.php:76
msgid "Group Text"
msgstr "Groepsbericht"
#: group_text.php:78
msgid "Use a text only (non-image) group selector in the \"group edit\" menu"
msgstr ""
#: group_text.php:84
msgid "Submit"
msgstr ""

View file

@ -0,0 +1,9 @@
<?php
if(! function_exists("string_plural_select_nl")) {
function string_plural_select_nl($n){
$n = intval($n);
return intval($n != 1);
}}
$a->strings['Group Text settings updated.'] = 'Groupsberichten instellingen opgeslagen';
$a->strings['Group Text'] = 'Groepsbericht';

View file

@ -0,0 +1,28 @@
# ADDON group_text
# Copyright (C)
# This file is distributed under the same license as the Friendica group_text addon package.
#
#
# Translators:
# Waldemar Stoczkowski, 2018
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-11-21 19:14-0500\n"
"PO-Revision-Date: 2014-06-23 08:35+0000\n"
"Last-Translator: Waldemar Stoczkowski, 2018\n"
"Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: pl\n"
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
#: group_text.php:58
msgid "Use a text only (non-image) group selector in the \"group edit\" menu"
msgstr "Użyj tylko tekst (bez obrazu) selektor grupy w menu \"Edycja grupy\""
#: group_text.php:63
msgid "Group Text"
msgstr "Grupuj tekst"

View file

@ -0,0 +1,9 @@
<?php
if(! function_exists("string_plural_select_pl")) {
function string_plural_select_pl($n){
$n = intval($n);
if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; }
}}
$a->strings['Use a text only (non-image) group selector in the "group edit" menu'] = 'Użyj tylko tekst (bez obrazu) selektor grupy w menu "Edycja grupy"';
$a->strings['Group Text'] = 'Grupuj tekst';

View file

@ -0,0 +1,5 @@
<?php
$a->strings["Group Text"] = "";
$a->strings["Use a text only (non-image) group selector in the \"group edit\" menu"] = "";
$a->strings["Submit"] = "Enviar";

View file

@ -0,0 +1,36 @@
# ADDON group_text
# Copyright (C)
# This file is distributed under the same license as the Friendica group_text addon package.
#
#
# Translators:
# Doru DEACONU <dumitrudeaconu@yahoo.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-02-27 05:01-0500\n"
"PO-Revision-Date: 2014-11-27 14:15+0000\n"
"Last-Translator: Doru DEACONU <dumitrudeaconu@yahoo.com>\n"
"Language-Team: Romanian (Romania) (http://www.transifex.com/projects/p/friendica/language/ro_RO/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ro_RO\n"
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
#: group_text.php:46
msgid "Group Text settings updated."
msgstr "Configurările Text Grup, au fost actualizate."
#: group_text.php:76
msgid "Group Text"
msgstr "Text Grup"
#: group_text.php:78
msgid "Use a text only (non-image) group selector in the \"group edit\" menu"
msgstr "Folosiți în meniul \"editare grup\" un selector de grup strict textual (fără-imagine)"
#: group_text.php:84
msgid "Submit"
msgstr "Trimite"

View file

@ -0,0 +1,11 @@
<?php
if(! function_exists("string_plural_select_ro")) {
function string_plural_select_ro($n){
$n = intval($n);
if ($n==1) { return 0; } else if ((($n%100>19)||(($n%100==0)&&($n!=0)))) { return 2; } else { return 1; }
}}
$a->strings['Group Text settings updated.'] = 'Configurările Text Grup, au fost actualizate.';
$a->strings['Group Text'] = 'Text Grup';
$a->strings['Use a text only (non-image) group selector in the "group edit" menu'] = 'Folosiți în meniul "editare grup" un selector de grup strict textual (fără-imagine)';
$a->strings['Submit'] = 'Trimite';

View file

@ -0,0 +1,36 @@
# ADDON group_text
# Copyright (C)
# This file is distributed under the same license as the Friendica group_text addon package.
#
#
# Translators:
# Stanislav N. <pztrn@pztrn.name>, 2017
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-02-27 05:01-0500\n"
"PO-Revision-Date: 2017-04-08 17:26+0000\n"
"Last-Translator: Stanislav N. <pztrn@pztrn.name>\n"
"Language-Team: Russian (http://www.transifex.com/Friendica/friendica/language/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ru\n"
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
#: group_text.php:46
msgid "Group Text settings updated."
msgstr "Настройки Group Text обновлены."
#: group_text.php:76
msgid "Group Text"
msgstr "Group Text"
#: group_text.php:78
msgid "Use a text only (non-image) group selector in the \"group edit\" menu"
msgstr "Используйте текстовый (не изображение) селектор группы в режиме редактирования группы"
#: group_text.php:84
msgid "Submit"
msgstr "Добавить"

View file

@ -0,0 +1,11 @@
<?php
if(! function_exists("string_plural_select_ru")) {
function string_plural_select_ru($n){
$n = intval($n);
if ($n%10==1 && $n%100!=11) { return 0; } else if ($n%10>=2 && $n%10<=4 && ($n%100<12 || $n%100>14)) { return 1; } else if ($n%10==0 || ($n%10>=5 && $n%10<=9) || ($n%100>=11 && $n%100<=14)) { return 2; } else { return 3; }
}}
$a->strings['Group Text settings updated.'] = 'Настройки Group Text обновлены.';
$a->strings['Group Text'] = 'Group Text';
$a->strings['Use a text only (non-image) group selector in the "group edit" menu'] = 'Используйте текстовый (не изображение) селектор группы в режиме редактирования группы';
$a->strings['Submit'] = 'Добавить';

View file

@ -0,0 +1,28 @@
# ADDON group_text
# Copyright (C)
# This file is distributed under the same license as the Friendica group_text addon package.
#
#
# Translators:
# Kristoffer Grundström <lovaren@gmail.com>, 2022
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-11-21 19:14-0500\n"
"PO-Revision-Date: 2022-01-16 00:35+0000\n"
"Last-Translator: Kristoffer Grundström <lovaren@gmail.com>\n"
"Language-Team: Swedish (http://www.transifex.com/Friendica/friendica/language/sv/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: sv\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: group_text.php:58
msgid "Use a text only (non-image) group selector in the \"group edit\" menu"
msgstr ""
#: group_text.php:63
msgid "Group Text"
msgstr "Grupptext"

View file

@ -0,0 +1,8 @@
<?php
if(! function_exists("string_plural_select_sv")) {
function string_plural_select_sv($n){
$n = intval($n);
return intval($n != 1);
}}
$a->strings['Group Text'] = 'Grupptext';

View file

@ -0,0 +1,6 @@
<?php
$a->strings["Group Text settings updated."] = "组正文设置更新了。";
$a->strings["Group Text"] = "正文";
$a->strings["Use a text only (non-image) group selector in the \"group edit\" menu"] = "用光正文(无图片)组选择器在「组编辑」单";
$a->strings["Submit"] = "提交";

View file

@ -0,0 +1 @@
{{include file="field_checkbox.tpl" field=$enabled}}

85
cld/README.md Normal file
View file

@ -0,0 +1,85 @@
Compact Language Detector
===
CLD2 is an advanced language dectection library with a high reliability.
This addon depends on the CLD PHP module which is not included in any Linux distribution.
It needs to be built and installed by hand, which is not totally straightforward.
Prerequisite
---
To be able to build the extension, you need the CLD module and the files for the PHP module development.
On Debian you install the packages php-dev, libcld2-dev and libcld2-0.
Make sure to have installed the correct PHP version.
Means: When you have got both PHP 8.0 and 8.2 on your system, you have to install php8.0-dev as well.
Installation
---
The original PHP extension is https://github.com/fntlnz/cld2-php-ext.
However, it doesn't support PHP8.
So https://github.com/hiteule/cld2-php-ext/tree/support-php8 has to be used.
Download the source code:
```
wget https://github.com/hiteule/cld2-php-ext/archive/refs/heads/support-php8.zip
```
Unzip it:
```
unzip support-php8.zip
```
Change into the folder:
```
cd cld2-php-ext-support-php8/
```
Configure for the PHP Api version:
```
phpize
```
(if you have got several PHP versions on your system, execute the command with the version that you run Friendica with, e.g. `phpize8.0`)
Create the Makefile:
```
./configure --with-cld2=/usr/include/cld2
```
Have a look at the line `checking for PHP includes`.
When the output (for example `/usr/include/php/20220829` doesn't match the API version that you got from `phpize`, then you have to change all the version codes in your `Makefile` afterwards)
Create the module:
```
make -j
```
Install it:
```
sudo make install
```
Change to the folder with the available modules. When you use PHP 8.2 on Debian it is:
```
cd /etc/php/8.2/mods-available
```
Create the file `cld2.ini` with this content:
```
; configuration for php cld2 module
; priority=20
extension=cld2.so
```
Enable the module for all versions and all sapi:
```
phpenmod -v ALL -s ALL cld2
```
Then restart the apache or fpm (or whatever you use) to load the changed configuration.
Call `/admin/phpinfo` on your webserver.
You then see the PHP Info.
Search for "cld2".
The module is installed, when you find it here.
**Only proceed when the module is installed**
Now you can enable the addon.

71
cld/cld.php Normal file
View file

@ -0,0 +1,71 @@
<?php
/**
* Name: Compact Language Detector
* Description: Improved language detection
* Version: 0.1
* Author: Michael Vogel <heluecht@pirati.ca>
*/
use Friendica\Core\Hook;
use Friendica\Core\Logger;
use Friendica\DI;
function cld_install()
{
Hook::register('detect_languages', __FILE__, 'cld_detect_languages');
}
function cld_detect_languages(array &$data)
{
if (!in_array('cld2', get_loaded_extensions())) {
Logger::warning('CLD2 is not installed.');
return;
}
$cld2 = new \CLD2Detector();
$cld2->setEncodingHint(CLD2Encoding::UTF8); // optional, hints about text encoding
$cld2->setPlainText(true);
$result = $cld2->detect($data['text']);
if ($data['detected']) {
$original = array_key_first($data['detected']);
} else {
$original = '';
}
$detected = DI::l10n()->toISO6391($result['language_code']);
// languages that aren't supported via the base language detection or tend to false detections
if ((strlen($detected) == 3) || in_array($detected, ['ht', 'kk', 'ku', 'ky', 'lg', 'mg', 'mk', 'mt', 'ny', 'rw', 'st', 'su', 'tg', 'ts', 'xx'])) {
return;
}
if (!$result['is_reliable']) {
Logger::debug('Unreliable detection', ['uri-id' => $data['uri-id'], 'original' => $original, 'detected' => $detected, 'name' => $result['language_name'], 'probability' => $result['language_probability'], 'text' => $data['text']]);
if (($original == $detected) && ($data['detected'][$original] < $result['language_probability'] / 100)) {
$data['detected'][$original] = $result['language_probability'] / 100;
}
return;
}
$available = array_keys(DI::l10n()->getLanguageCodes());
if (!in_array($detected, $available)) {
Logger::debug('Unsupported language', ['uri-id' => $data['uri-id'], 'original' => $original, 'detected' => $detected, 'name' => $result['language_name'], 'probability' => $result['language_probability'], 'text' => $data['text']]);
return;
}
if ($original != $detected) {
Logger::debug('Detected different language', ['uri-id' => $data['uri-id'], 'original' => $original, 'detected' => $detected, 'name' => $result['language_name'], 'probability' => $result['language_probability'], 'text' => $data['text']]);
}
$length = count($data['detected']);
if ($length > 0) {
unset($data['detected'][$detected]);
$data['detected'] = array_merge([$detected => $result['language_probability'] / 100], array_slice($data['detected'], 0, $length - 1));
} else {
$data['detected'] = [$detected => $result['language_probability'] / 100];
}
}

View file

@ -6,7 +6,7 @@
# Translators:
# Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2019
# Ulf Rompe <transifex.com@rompe.org>, 2019
# foss <foss@openmailbox.org>, 2020
# foss <oss@disr.it>, 2020
#
#, fuzzy
msgid ""
@ -15,8 +15,8 @@ msgstr ""
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
"PO-Revision-Date: 2019-01-23 16:01+0000\n"
"Last-Translator: foss <foss@openmailbox.org>, 2020\n"
"Language-Team: German (https://www.transifex.com/Friendica/teams/12172/de/)\n"
"Last-Translator: foss <oss@disr.it>, 2020\n"
"Language-Team: German (https://app.transifex.com/Friendica/teams/12172/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -92,7 +92,7 @@ function curweather_network_mod_init(string &$body)
return;
}
DI::page()['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="' . DI::baseUrl()->get() . '/addon/curweather/curweather.css' . '" media="all" />' . "\r\n";
DI::page()['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="' . DI::baseUrl() . '/addon/curweather/curweather.css' . '" media="all" />' . "\r\n";
// $rpt value is needed for location
// $lang will be taken from the browser session to honour user settings

View file

@ -11,124 +11,116 @@ msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-25 17:17+0200\n"
"PO-Revision-Date: 2018-07-05 17:03+0000\n"
"Last-Translator: Aditoo\n"
"Language-Team: Czech (http://www.transifex.com/Friendica/friendica/language/cs/)\n"
"POT-Creation-Date: 2021-11-21 19:14-0500\n"
"PO-Revision-Date: 2014-06-22 11:34+0000\n"
"Last-Translator: Aditoo, 2018\n"
"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: cs\n"
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
#: curweather.php:31
msgid "Error fetching weather data.\\nError was: "
msgstr "Chyba při získávání dat o počasí.\\nChyba:"
#: curweather.php:47
msgid "Error fetching weather data. Error was: "
msgstr ""
#: curweather.php:111 curweather.php:172
#: curweather.php:130
msgid "Current Weather"
msgstr "Aktuální počasí"
#: curweather.php:118
#: curweather.php:137
msgid "Relative Humidity"
msgstr "Relativní vlhkost vzduchu"
#: curweather.php:119
#: curweather.php:138
msgid "Pressure"
msgstr "Tlak"
#: curweather.php:120
#: curweather.php:139
msgid "Wind"
msgstr "Vítr"
#: curweather.php:121
#: curweather.php:140
msgid "Last Updated"
msgstr "Naposledy aktualizováno"
#: curweather.php:122
#: curweather.php:141
msgid "Data by"
msgstr "Data podle"
#: curweather.php:123
#: curweather.php:142
msgid "Show on map"
msgstr "Ukázat na mapě"
#: curweather.php:128
#: curweather.php:147
msgid "There was a problem accessing the weather data. But have a look"
msgstr "Při získávání dat o počasí nastala chyba. Podívejte se ale"
#: curweather.php:130
#: curweather.php:149
msgid "at OpenWeatherMap"
msgstr "na OpenWeatherMap"
#: curweather.php:146
msgid "Current Weather settings updated."
msgstr "Nastavení pro Aktuální počasí aktualizováno."
#: curweather.php:161
#: curweather.php:178
msgid "No APPID found, please contact your admin to obtain one."
msgstr "Žádné APPID nebylo nalezeno, prosím kontaktujte svého administrátora pro získání APPID."
#: curweather.php:171 curweather.php:200
msgid "Save Settings"
msgstr "Uložit nastavení"
#: curweather.php:172
msgid "Settings"
msgstr "Nastavení"
#: curweather.php:174
#: curweather.php:188
msgid "Enter either the name of your location or the zip code."
msgstr "Zadejte buď název místa, kde se nacházíte, nebo PSČ."
#: curweather.php:175
#: curweather.php:189
msgid "Your Location"
msgstr "Vaše poloha"
#: curweather.php:175
#: curweather.php:189
msgid ""
"Identifier of your location (name or zip code), e.g. <em>Berlin,DE</em> or "
"<em>14476,DE</em>."
msgstr "Identifikátor vaší polohy (název nebo PSČ), např. <em>Praha,CZ</em> nebo <em>11000,CZ</em>."
#: curweather.php:176
#: curweather.php:190
msgid "Units"
msgstr "Jednotky"
#: curweather.php:176
#: curweather.php:190
msgid "select if the temperature should be displayed in &deg;C or &deg;F"
msgstr "vyberte, jestli by se teplota měla zobrazovat v &deg;C či &deg;F"
#: curweather.php:177
#: curweather.php:191
msgid "Show weather data"
msgstr "Ukázat data o počasí"
#: curweather.php:190
msgid "Curweather settings saved."
msgstr "Nastavení Curwather uložena."
#: curweather.php:196
msgid "Current Weather Settings"
msgstr ""
#: curweather.php:201
#: curweather.php:227
msgid "Save Settings"
msgstr "Uložit nastavení"
#: curweather.php:230
msgid "Caching Interval"
msgstr "Ukládám interval do mezipaměti"
msgstr "Interval mezipaměti"
#: curweather.php:201
#: curweather.php:232
msgid ""
"For how long should the weather data be cached? Choose according your "
"OpenWeatherMap account type."
msgstr "Na jak dlouho by vaše data o počasí měla být uložena v mezipaměti? Vyberte podle typu vašeho účtu na OpenWeatherMap."
#: curweather.php:201
#: curweather.php:233
msgid "no cache"
msgstr "žádná mezipaměť"
#: curweather.php:201
#: curweather.php:234 curweather.php:235 curweather.php:236 curweather.php:237
msgid "minutes"
msgstr "minut"
#: curweather.php:202
#: curweather.php:240
msgid "Your APPID"
msgstr "Vaše APPID"
#: curweather.php:202
#: curweather.php:240
msgid "Your API key provided by OpenWeatherMap"
msgstr "Váš API klíč poskytnutý OpenWetherMap"

View file

@ -5,7 +5,6 @@ function string_plural_select_cs($n){
$n = intval($n);
if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; }
}}
$a->strings['Error fetching weather data.\nError was: '] = 'Chyba při získávání dat o počasí.\nChyba:';
$a->strings['Current Weather'] = 'Aktuální počasí';
$a->strings['Relative Humidity'] = 'Relativní vlhkost vzduchu';
$a->strings['Pressure'] = 'Tlak';
@ -15,18 +14,15 @@ $a->strings['Data by'] = 'Data podle';
$a->strings['Show on map'] = 'Ukázat na mapě';
$a->strings['There was a problem accessing the weather data. But have a look'] = 'Při získávání dat o počasí nastala chyba. Podívejte se ale';
$a->strings['at OpenWeatherMap'] = 'na OpenWeatherMap';
$a->strings['Current Weather settings updated.'] = 'Nastavení pro Aktuální počasí aktualizováno.';
$a->strings['No APPID found, please contact your admin to obtain one.'] = 'Žádné APPID nebylo nalezeno, prosím kontaktujte svého administrátora pro získání APPID.';
$a->strings['Save Settings'] = 'Uložit nastavení';
$a->strings['Settings'] = 'Nastavení';
$a->strings['Enter either the name of your location or the zip code.'] = 'Zadejte buď název místa, kde se nacházíte, nebo PSČ.';
$a->strings['Your Location'] = 'Vaše poloha';
$a->strings['Identifier of your location (name or zip code), e.g. <em>Berlin,DE</em> or <em>14476,DE</em>.'] = 'Identifikátor vaší polohy (název nebo PSČ), např. <em>Praha,CZ</em> nebo <em>11000,CZ</em>.';
$a->strings['Units'] = 'Jednotky';
$a->strings['select if the temperature should be displayed in &deg;C or &deg;F'] = 'vyberte, jestli by se teplota měla zobrazovat v &deg;C či &deg;F';
$a->strings['Show weather data'] = 'Ukázat data o počasí';
$a->strings['Curweather settings saved.'] = 'Nastavení Curwather uložena.';
$a->strings['Caching Interval'] = 'Ukládám interval do mezipaměti';
$a->strings['Save Settings'] = 'Uložit nastavení';
$a->strings['Caching Interval'] = 'Interval mezipaměti';
$a->strings['For how long should the weather data be cached? Choose according your OpenWeatherMap account type.'] = 'Na jak dlouho by vaše data o počasí měla být uložena v mezipaměti? Vyberte podle typu vašeho účtu na OpenWeatherMap.';
$a->strings['no cache'] = 'žádná mezipaměť';
$a->strings['minutes'] = 'minut';

View file

@ -15,9 +15,9 @@ msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-11-21 19:14-0500\n"
"PO-Revision-Date: 2022-01-22 17:28+0000\n"
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>\n"
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
"PO-Revision-Date: 2014-06-22 11:34+0000\n"
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2016,2021-2022\n"
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -186,7 +186,7 @@ function diaspora_post_local(array &$b)
function diaspora_send(array &$b)
{
$hostname = DI::baseUrl()->getHostname();
$hostname = DI::baseUrl()->getHost();
Logger::notice('diaspora_send: invoked');
@ -205,7 +205,7 @@ function diaspora_send(array &$b)
$b['body'] = Post\Media::addAttachmentsToBody($b['uri-id'], DI::contentItem()->addSharedPost($b));
// Dont't post if the post doesn't belong to us.
// This is a check for forum postings
// This is a check for group postings
$self = DBA::selectFirst('contact', ['id'], ['uid' => $b['uid'], 'self' => true]);
if ($b['contact-id'] != $self['id']) {

View file

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-11-21 19:17-0500\n"
"POT-Creation-Date: 2023-06-03 15:48-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -17,84 +17,84 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: diaspora.php:44
#: diaspora.php:43
msgid "Post to Diaspora"
msgstr ""
#: diaspora.php:67
#: diaspora.php:66
#, php-format
msgid ""
"Please remember: You can always be reached from Diaspora with your Friendica "
"handle <strong>%s</strong>. "
msgstr ""
#: diaspora.php:68
#: diaspora.php:67
msgid ""
"This connector is only meant if you still want to use your old Diaspora "
"account for some time. "
msgstr ""
#: diaspora.php:69
#: diaspora.php:68
#, php-format
msgid ""
"However, it is preferred that you tell your Diaspora contacts the new handle "
"<strong>%s</strong> instead."
msgstr ""
#: diaspora.php:79
#: diaspora.php:78
msgid "All aspects"
msgstr ""
#: diaspora.php:80
#: diaspora.php:79
msgid "Public"
msgstr ""
#: diaspora.php:86
#: diaspora.php:85
msgid "Post to aspect:"
msgstr ""
#: diaspora.php:87
#: diaspora.php:86
#, php-format
msgid "Connected with your Diaspora account <strong>%s</strong>"
msgstr ""
#: diaspora.php:90
#: diaspora.php:89
msgid ""
"Can't login to your Diaspora account. Please check handle (in the format "
"user@domain.tld) and password."
msgstr ""
#: diaspora.php:97
#: diaspora.php:96
msgid "Information"
msgstr ""
#: diaspora.php:98
#: diaspora.php:97
msgid "Error"
msgstr ""
#: diaspora.php:104
#: diaspora.php:103
msgid "Enable Diaspora Post Addon"
msgstr ""
#: diaspora.php:105
#: diaspora.php:104
msgid "Diaspora handle"
msgstr ""
#: diaspora.php:106
#: diaspora.php:105
msgid "Diaspora password"
msgstr ""
#: diaspora.php:106
#: diaspora.php:105
msgid ""
"Privacy notice: Your Diaspora password will be stored unencrypted to "
"authenticate you with your Diaspora pod. This means your Friendica node "
"administrator can have access to it."
msgstr ""
#: diaspora.php:108
#: diaspora.php:107
msgid "Post to Diaspora by default"
msgstr ""
#: diaspora.php:113
#: diaspora.php:112
msgid "Diaspora Export"
msgstr ""

View file

@ -4,7 +4,7 @@
#
#
# Translators:
# foss <foss@openmailbox.org>, 2020
# foss <oss@disr.it>, 2020
# Till Mohr <tmtrfx@till-mohr.de>, 2021
# Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2014
# Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2018,2020
@ -14,9 +14,9 @@ msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-11-21 19:17-0500\n"
"PO-Revision-Date: 2021-12-22 15:27+0000\n"
"Last-Translator: Transifex Bot <>\n"
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
"PO-Revision-Date: 2014-06-22 11:39+0000\n"
"Last-Translator: Till Mohr <tmtrfx@till-mohr.de>, 2021\n"
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -10,40 +10,36 @@ msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-02-27 05:01-0500\n"
"PO-Revision-Date: 2018-06-14 10:13+0000\n"
"Last-Translator: Aditoo\n"
"Language-Team: Czech (http://www.transifex.com/Friendica/friendica/language/cs/)\n"
"POT-Creation-Date: 2021-11-21 19:17-0500\n"
"PO-Revision-Date: 2014-06-22 11:41+0000\n"
"Last-Translator: Aditoo, 2018\n"
"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: cs\n"
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
#: dwpost.php:39
#: dwpost.php:43
msgid "Post to Dreamwidth"
msgstr "Poslat na Dreamwidth"
msgstr "Odeslat na Dreamwidth"
#: dwpost.php:70
msgid "Dreamwidth Post Settings"
msgstr "Nastavení Dreamwidth Post"
#: dwpost.php:63
msgid "Enable Dreamwidth Post Addon"
msgstr ""
#: dwpost.php:72
msgid "Enable dreamwidth Post Addon"
msgstr "Povolit doplněk Dreamwidth Post"
#: dwpost.php:64
msgid "Dreamwidth username"
msgstr ""
#: dwpost.php:77
msgid "dreamwidth username"
msgstr "dreamwidth uživatelské jméno"
#: dwpost.php:65
msgid "Dreamwidth password"
msgstr ""
#: dwpost.php:82
msgid "dreamwidth password"
msgstr "dreamwidth heslo"
#: dwpost.php:66
msgid "Post to Dreamwidth by default"
msgstr ""
#: dwpost.php:87
msgid "Post to dreamwidth by default"
msgstr "Ve výchozím stavu posílat na dreamwidth"
#: dwpost.php:93
msgid "Submit"
msgstr "Odeslat"
#: dwpost.php:71
msgid "Dreamwidth Export"
msgstr ""

View file

@ -5,10 +5,4 @@ function string_plural_select_cs($n){
$n = intval($n);
if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; }
}}
$a->strings['Post to Dreamwidth'] = 'Poslat na Dreamwidth';
$a->strings['Dreamwidth Post Settings'] = 'Nastavení Dreamwidth Post';
$a->strings['Enable dreamwidth Post Addon'] = 'Povolit doplněk Dreamwidth Post';
$a->strings['dreamwidth username'] = 'dreamwidth uživatelské jméno';
$a->strings['dreamwidth password'] = 'dreamwidth heslo';
$a->strings['Post to dreamwidth by default'] = 'Ve výchozím stavu posílat na dreamwidth';
$a->strings['Submit'] = 'Odeslat';
$a->strings['Post to Dreamwidth'] = 'Odeslat na Dreamwidth';

View file

@ -13,9 +13,9 @@ msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-11-21 19:17-0500\n"
"PO-Revision-Date: 2022-01-22 17:33+0000\n"
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>\n"
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
"PO-Revision-Date: 2014-06-22 11:41+0000\n"
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2018,2021-2022\n"
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -4,6 +4,8 @@
* Description: Add a directory of forums hosted on your server, with verbose descriptions.
* Version: 1.1
* Author: Thomas Willingham <https://beardyunixer.com/profile/beardyunixer>
* Status: Unsupported
* Note: Please use Group Directory instead
*/
use Friendica\App;

View file

@ -11,9 +11,9 @@ msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
"PO-Revision-Date: 2021-02-06 16:55+0000\n"
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>\n"
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
"PO-Revision-Date: 2014-06-22 12:31+0000\n"
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2021\n"
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -13,9 +13,9 @@ msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-11-21 19:14-0500\n"
"PO-Revision-Date: 2021-12-22 15:15+0000\n"
"Last-Translator: Transifex Bot <>\n"
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
"PO-Revision-Date: 2014-06-22 12:33+0000\n"
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2019\n"
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -13,9 +13,9 @@ msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-11-21 19:14-0500\n"
"PO-Revision-Date: 2021-12-22 17:23+0000\n"
"Last-Translator: Transifex Bot <>\n"
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
"PO-Revision-Date: 2014-06-23 08:27+0000\n"
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2018,2021\n"
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -13,9 +13,9 @@ msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-11-21 19:14-0500\n"
"PO-Revision-Date: 2021-12-22 15:27+0000\n"
"Last-Translator: Transifex Bot <>\n"
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
"PO-Revision-Date: 2014-06-23 08:30+0000\n"
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2018,2021\n"
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -4,72 +4,69 @@
#
#
# Translators:
# Michal Šupler <msupler@gmail.com>, 2014-2015
# Aditoo, 2018
# michal_s <msupler@gmail.com>, 2014-2015
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-02-27 05:01-0500\n"
"PO-Revision-Date: 2015-02-11 19:41+0000\n"
"Last-Translator: Michal Šupler <msupler@gmail.com>\n"
"Language-Team: Czech (http://www.transifex.com/projects/p/friendica/language/cs/)\n"
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
"PO-Revision-Date: 2014-06-23 08:33+0000\n"
"Last-Translator: Aditoo, 2018\n"
"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: cs\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
#: gravatar.php:71
#: gravatar.php:78
msgid "generic profile image"
msgstr "generický profilový obrázek"
#: gravatar.php:72
#: gravatar.php:79
msgid "random geometric pattern"
msgstr "náhodný geometrický vzor"
#: gravatar.php:73
#: gravatar.php:80
msgid "monster face"
msgstr "tvář příšery"
#: gravatar.php:74
#: gravatar.php:81
msgid "computer generated face"
msgstr "počítačově generovaná tvář"
#: gravatar.php:75
#: gravatar.php:82
msgid "retro arcade style face"
msgstr "tvář v retro arkádovém stylu"
#: gravatar.php:89
#: gravatar.php:96
msgid "Information"
msgstr "Informace"
#: gravatar.php:89
#: gravatar.php:96
msgid ""
"Libravatar addon is installed, too. Please disable Libravatar addon or this "
"Gravatar addon.<br>The Libravatar addon will fall back to Gravatar if "
"nothing was found at Libravatar."
msgstr "Libravatar doplněk je také nainstalován. Prosím zakažte doplněk Libravatar nebo tento doplněk Gravatar.<br>Libravatar doplněk se vrátí k doplňku Gravatar, pokud na Libravataru nebude nic nalezeno."
msgstr "Doplněk Libravatar je také nainstalován. Prosím zakažte doplněk Libravatar nebo tento doplněk Gravatar.<br>Doplněk Libravatar se přepne na Gravatar, pokud na Libravataru nebude nic nalezeno."
#: gravatar.php:95
msgid "Submit"
msgstr "Odeslat"
#: gravatar.php:102
msgid "Save Settings"
msgstr ""
#: gravatar.php:96
#: gravatar.php:103
msgid "Default avatar image"
msgstr "Defaultní obrázek avataru"
msgstr "Výchozí avatarový obrázek"
#: gravatar.php:96
#: gravatar.php:103
msgid "Select default avatar image if none was found at Gravatar. See README"
msgstr "Nastavte defaulní obrázek avatara pokud ho již nemáte na Gravatar. Více viz. soubor README."
msgstr "Nastavte výchozí avatarový obrázek, pokud ho již nemáte na Gravataru. Více viz. soubor README."
#: gravatar.php:97
#: gravatar.php:104
msgid "Rating of images"
msgstr "Hodnocení obrázků"
#: gravatar.php:97
#: gravatar.php:104
msgid "Select the appropriate avatar rating for your site. See README"
msgstr "Zadejte ohodnocení příslušného avatara pro vaši stránku. Viz README."
#: gravatar.php:111
msgid "Gravatar settings updated."
msgstr "Nastavení Gravatar aktualizováno."
msgstr "Zadejte příslušné ohodnocení avataru pro vaši stránku. Viz README."

View file

@ -3,7 +3,7 @@
if(! function_exists("string_plural_select_cs")) {
function string_plural_select_cs($n){
$n = intval($n);
if (($n==1)) { return 0; } else if (($n>=2 && $n<=4)) { return 1; } else { return 2; }
if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; }
}}
$a->strings['generic profile image'] = 'generický profilový obrázek';
$a->strings['random geometric pattern'] = 'náhodný geometrický vzor';
@ -11,10 +11,8 @@ $a->strings['monster face'] = 'tvář příšery';
$a->strings['computer generated face'] = 'počítačově generovaná tvář';
$a->strings['retro arcade style face'] = 'tvář v retro arkádovém stylu';
$a->strings['Information'] = 'Informace';
$a->strings['Libravatar addon is installed, too. Please disable Libravatar addon or this Gravatar addon.<br>The Libravatar addon will fall back to Gravatar if nothing was found at Libravatar.'] = 'Libravatar doplněk je také nainstalován. Prosím zakažte doplněk Libravatar nebo tento doplněk Gravatar.<br>Libravatar doplněk se vrátí k doplňku Gravatar, pokud na Libravataru nebude nic nalezeno.';
$a->strings['Submit'] = 'Odeslat';
$a->strings['Default avatar image'] = 'Defaultní obrázek avataru';
$a->strings['Select default avatar image if none was found at Gravatar. See README'] = 'Nastavte defaulní obrázek avatara pokud ho již nemáte na Gravatar. Více viz. soubor README.';
$a->strings['Libravatar addon is installed, too. Please disable Libravatar addon or this Gravatar addon.<br>The Libravatar addon will fall back to Gravatar if nothing was found at Libravatar.'] = 'Doplněk Libravatar je také nainstalován. Prosím zakažte doplněk Libravatar nebo tento doplněk Gravatar.<br>Doplněk Libravatar se přepne na Gravatar, pokud na Libravataru nebude nic nalezeno.';
$a->strings['Default avatar image'] = 'Výchozí avatarový obrázek';
$a->strings['Select default avatar image if none was found at Gravatar. See README'] = 'Nastavte výchozí avatarový obrázek, pokud ho již nemáte na Gravataru. Více viz. soubor README.';
$a->strings['Rating of images'] = 'Hodnocení obrázků';
$a->strings['Select the appropriate avatar rating for your site. See README'] = 'Zadejte ohodnocení příslušného avatara pro vaši stránku. Viz README.';
$a->strings['Gravatar settings updated.'] = 'Nastavení Gravatar aktualizováno.';
$a->strings['Select the appropriate avatar rating for your site. See README'] = 'Zadejte příslušné ohodnocení avataru pro vaši stránku. Viz README.';

View file

@ -13,9 +13,9 @@ msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
"PO-Revision-Date: 2021-02-06 17:01+0000\n"
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>\n"
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
"PO-Revision-Date: 2014-06-23 08:33+0000\n"
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2021\n"
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -4,6 +4,8 @@
* Description: Disable images in group edit menu
* Version: 1.0
* Author: Thomas Willingham <https://kakste.com/profile/beardyunixer>
* Status: Unsupported
* Note: Please use Circle Text instead
*/
use Friendica\App;

View file

@ -13,9 +13,9 @@ msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-11-21 19:14-0500\n"
"PO-Revision-Date: 2021-12-22 15:27+0000\n"
"Last-Translator: Transifex Bot <>\n"
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
"PO-Revision-Date: 2014-06-23 08:35+0000\n"
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2021\n"
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -0,0 +1,155 @@
<?php
/**
* Name: Group Directory
* Description: Add a directory of groups hosted on your server, with verbose descriptions.
* Version: 1.1
* Author: Thomas Willingham <https://beardyunixer.com/profile/beardyunixer>
*/
use Friendica\Content\Nav;
use Friendica\Content\Pager;
use Friendica\Content\Widget;
use Friendica\Core\Hook;
use Friendica\Core\Renderer;
use Friendica\Database\DBA;
use Friendica\DI;
use Friendica\Model\Profile;
use Friendica\Model\User;
global $groupdirectory_search;
function groupdirectory_install()
{
Hook::register('app_menu', __FILE__, 'groupdirectory_app_menu');
}
/**
* This is a statement rather than an actual function definition. The simple
* existence of this method is checked to figure out if the addon offers a
* module.
*/
/**
* This is a statement rather than an actual function definition. The simple
* existence of this method is checked to figure out if the addon offers a
* module.
*/
function groupdirectory_module() {}
function groupdirectory_app_menu(array &$b)
{
$b['app_menu'][] = '<div class="app-title"><a href="groupdirectory">' . DI::l10n()->t('Group Directory') . '</a></div>';
}
function groupdirectory_init()
{
if (DI::userSession()->getLocalUserId()) {
DI::page()['aside'] .= Widget::findPeople();
}
}
function groupdirectory_post()
{
global $groupdirectory_search;
if (!empty($_POST['search'])) {
$groupdirectory_search = $_POST['search'];
}
}
function groupdirectory_content()
{
global $groupdirectory_search;
if (DI::config()->get('system', 'block_public') && !DI::userSession()->getLocalUserId() && !DI::userSession()->getRemoteUserId()) {
DI::sysmsg()->addNotice(DI::l10n()->t('Public access denied.'));
return '';
}
$o = '';
$entries = [];
Nav::setSelected('directory');
if (!empty($groupdirectory_search)) {
$search = trim($groupdirectory_search);
} else {
$search = (!empty($_GET['search']) ? trim(rawurldecode($_GET['search'])) : '');
}
$gdirpath = '';
$dirurl = DI::config()->get('system', 'directory');
if (strlen($dirurl)) {
$gdirpath = Profile::zrl($dirurl, true);
}
$sql_extra = '';
if (strlen($search)) {
$search = DBA::escape($search);
$sql_extra = " AND ((`profile`.`name` LIKE '%$search%') OR
(`user`.`nickname` LIKE '%$search%') OR
(`profile`.`about` LIKE '%$search%') OR
(`profile`.`locality` LIKE '%$search%') OR
(`profile`.`region` LIKE '%$search%') OR
(`profile`.`country-name` LIKE '%$search%') OR
(`profile`.`pub_keywords` LIKE '%$search%') OR
(`profile`.`prv_keywords` LIKE '%$search%'))";
}
$publish = DI::config()->get('system', 'publish_all') ? '' : "`publish` = 1";
$total = 0;
$cnt = DBA::fetchFirst("SELECT COUNT(*) AS `total` FROM `profile`
INNER JOIN `user` ON `user`.`uid` = `profile`.`uid`
WHERE $publish AND NOT `user`.`blocked` AND NOT `user`.`account_removed` AND `user`.`page-flags` = ? $sql_extra",
User::PAGE_FLAGS_COMMUNITY);
if (DBA::isResult($cnt)) {
$total = $cnt['total'];
}
$pager = new Pager(DI::l10n(), DI::args()->getQueryString(), 60);
$order = " ORDER BY `name` ASC ";
$limit = $pager->getStart() . "," . $pager->getItemsPerPage();
$r = DBA::p("SELECT `profile`.*, `user`.`nickname`, `user`.`timezone` , `user`.`page-flags`,
`contact`.`addr`, `contact`.`url` FROM `profile`
INNER JOIN `user` ON `user`.`uid` = `profile`.`uid`
INNER JOIN `contact` ON `contact`.`uid` = `user`.`uid`
WHERE $publish AND NOT `user`.`blocked` AND NOT `user`.`account_removed` AND `user`.`page-flags` = ? AND `contact`.`self`
$sql_extra $order LIMIT $limit", User::PAGE_FLAGS_COMMUNITY
);
if (DBA::isResult($r)) {
if (in_array('small', DI::args()->getArgv())) {
$photo = 'thumb';
} else {
$photo = 'photo';
}
while ($rr = DBA::fetch($r)) {
$entries[] = Friendica\Module\Directory::formatEntry($rr, $photo);
}
DBA::close($r);
} else {
DI::sysmsg()->addNotice(DI::l10n()->t('No entries (some entries may be hidden).'));
}
$tpl = Renderer::getMarkupTemplate('directory_header.tpl');
$o .= Renderer::replaceMacros($tpl, [
'$search' => $search,
'$globaldir' => DI::l10n()->t('Global Directory'),
'$gdirpath' => $gdirpath,
'$desc' => DI::l10n()->t('Find on this site'),
'$contacts' => $entries,
'$finding' => DI::l10n()->t('Results for:'),
'$findterm' => (strlen($search) ? $search : ""),
'$title' => DI::l10n()->t('Group Directory'),
'$search_mod' => 'groupdirectory',
'$submit' => DI::l10n()->t('Find'),
'$paginate' => $pager->renderFull($total),
]);
return $o;
}

View file

@ -0,0 +1,46 @@
# ADDON groupdirectory
# Copyright (C)
# This file is distributed under the same license as the Friendica groupdirectory addon package.
#
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-06-03 15:49-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: groupdirectory.php:40 groupdirectory.php:148
msgid "Group Directory"
msgstr ""
#: groupdirectory.php:64
msgid "Public access denied."
msgstr ""
#: groupdirectory.php:136
msgid "No entries (some entries may be hidden)."
msgstr ""
#: groupdirectory.php:142
msgid "Global Directory"
msgstr ""
#: groupdirectory.php:144
msgid "Find on this site"
msgstr ""
#: groupdirectory.php:146
msgid "Results for:"
msgstr ""
#: groupdirectory.php:150
msgid "Find"
msgstr ""

View file

@ -0,0 +1,50 @@
# ADDON forumdirectory
# Copyright (C)
# This file is distributed under the same license as the Friendica forumdirectory addon package.
#
#
# Translators:
# abidin toumi <abidin24@tutanota.com>, 2021
# ButterflyOfFire, 2019
# Farida Khalaf <faridakhalaf@hotmail.com>, 2021
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
"PO-Revision-Date: 2021-10-29 10:27+0000\n"
"Last-Translator: abidin toumi <abidin24@tutanota.com>\n"
"Language-Team: Arabic (http://www.transifex.com/Friendica/friendica/language/ar/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ar\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
#: forumdirectory.php:33 forumdirectory.php:137
msgid "Forum Directory"
msgstr "دليل المنتدى"
#: forumdirectory.php:53
msgid "Public access denied."
msgstr "رُفض الوصول العمومي."
#: forumdirectory.php:125
msgid "No entries (some entries may be hidden)."
msgstr "لا توجد مدخلات (قد تكون بعض المدخلات مخفية)."
#: forumdirectory.php:131
msgid "Global Directory"
msgstr "الدليل العالمي"
#: forumdirectory.php:133
msgid "Find on this site"
msgstr "ابحث في هذا الموقع"
#: forumdirectory.php:135
msgid "Results for:"
msgstr "النتائج:"
#: forumdirectory.php:139
msgid "Find"
msgstr "ابحث"

View file

@ -0,0 +1,14 @@
<?php
if(! function_exists("string_plural_select_ar")) {
function string_plural_select_ar($n){
$n = intval($n);
if ($n==0) { return 0; } else if ($n==1) { return 1; } else if ($n==2) { return 2; } else if ($n%100>=3 && $n%100<=10) { return 3; } else if ($n%100>=11 && $n%100<=99) { return 4; } else { return 5; }
}}
$a->strings['Forum Directory'] = 'دليل المنتدى';
$a->strings['Public access denied.'] = 'رُفض الوصول العمومي.';
$a->strings['No entries (some entries may be hidden).'] = 'لا توجد مدخلات (قد تكون بعض المدخلات مخفية).';
$a->strings['Global Directory'] = 'الدليل العالمي';
$a->strings['Find on this site'] = 'ابحث في هذا الموقع';
$a->strings['Results for:'] = 'النتائج:';
$a->strings['Find'] = 'ابحث';

View file

@ -0,0 +1,80 @@
# ADDON forumdirectory
# Copyright (C)
# This file is distributed under the same license as the Friendica forumdirectory addon package.
#
#
# Translators:
# Joan Bar <friendica@tutanota.com>, 2019
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-02-27 05:01-0500\n"
"PO-Revision-Date: 2019-10-18 18:57+0000\n"
"Last-Translator: Joan Bar <friendica@tutanota.com>\n"
"Language-Team: Catalan (http://www.transifex.com/Friendica/friendica/language/ca/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ca\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: forumdirectory.php:22
msgid "Forum Directory"
msgstr "Directori de fòrums"
#: forumdirectory.php:53
msgid "Public access denied."
msgstr "L'accés al públic s'ha denegat."
#: forumdirectory.php:71
msgid "Global Directory"
msgstr "Directori global"
#: forumdirectory.php:79
msgid "Find on this site"
msgstr "Cerqueu en aquest lloc"
#: forumdirectory.php:81
msgid "Finding: "
msgstr "Trobament:"
#: forumdirectory.php:82
msgid "Site Directory"
msgstr "Directori de llocs"
#: forumdirectory.php:83
msgid "Find"
msgstr "trobar"
#: forumdirectory.php:133
msgid "Age: "
msgstr "Edat:"
#: forumdirectory.php:136
msgid "Gender: "
msgstr "Gènere:"
#: forumdirectory.php:156
msgid "Location:"
msgstr "Ubicació:"
#: forumdirectory.php:158
msgid "Gender:"
msgstr "Gènere:"
#: forumdirectory.php:160
msgid "Status:"
msgstr "Estat:"
#: forumdirectory.php:162
msgid "Homepage:"
msgstr "Pàgina inicial:"
#: forumdirectory.php:164
msgid "About:"
msgstr "Sobre:"
#: forumdirectory.php:201
msgid "No entries (some entries may be hidden)."
msgstr "No hi ha entrades (algunes entrades poden estar ocultes)."

View file

@ -0,0 +1,22 @@
<?php
if(! function_exists("string_plural_select_ca")) {
function string_plural_select_ca($n){
$n = intval($n);
return intval($n != 1);
}}
$a->strings['Forum Directory'] = 'Directori de fòrums';
$a->strings['Public access denied.'] = 'L\'accés al públic s\'ha denegat.';
$a->strings['Global Directory'] = 'Directori global';
$a->strings['Find on this site'] = 'Cerqueu en aquest lloc';
$a->strings['Finding: '] = 'Trobament:';
$a->strings['Site Directory'] = 'Directori de llocs';
$a->strings['Find'] = 'trobar';
$a->strings['Age: '] = 'Edat:';
$a->strings['Gender: '] = 'Gènere:';
$a->strings['Location:'] = 'Ubicació:';
$a->strings['Gender:'] = 'Gènere:';
$a->strings['Status:'] = 'Estat:';
$a->strings['Homepage:'] = 'Pàgina inicial:';
$a->strings['About:'] = 'Sobre:';
$a->strings['No entries (some entries may be hidden).'] = 'No hi ha entrades (algunes entrades poden estar ocultes).';

View file

@ -0,0 +1,81 @@
# ADDON forumdirectory
# Copyright (C)
# This file is distributed under the same license as the Friendica forumdirectory addon package.
#
#
# Translators:
# Aditoo, 2018
# michal_s <msupler@gmail.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-02-27 05:01-0500\n"
"PO-Revision-Date: 2018-09-11 19:04+0000\n"
"Last-Translator: Aditoo\n"
"Language-Team: Czech (http://www.transifex.com/Friendica/friendica/language/cs/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: cs\n"
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
#: forumdirectory.php:22
msgid "Forum Directory"
msgstr "Adresář fór"
#: forumdirectory.php:53
msgid "Public access denied."
msgstr "Veřejný přístup odepřen."
#: forumdirectory.php:71
msgid "Global Directory"
msgstr "Globální adresář"
#: forumdirectory.php:79
msgid "Find on this site"
msgstr "Najít na tomto webu"
#: forumdirectory.php:81
msgid "Finding: "
msgstr "Hledání: "
#: forumdirectory.php:82
msgid "Site Directory"
msgstr "Adresář serveru"
#: forumdirectory.php:83
msgid "Find"
msgstr "Najít"
#: forumdirectory.php:133
msgid "Age: "
msgstr "Věk: "
#: forumdirectory.php:136
msgid "Gender: "
msgstr "Pohlaví: "
#: forumdirectory.php:156
msgid "Location:"
msgstr "Poloha:"
#: forumdirectory.php:158
msgid "Gender:"
msgstr "Pohlaví:"
#: forumdirectory.php:160
msgid "Status:"
msgstr "Stav:"
#: forumdirectory.php:162
msgid "Homepage:"
msgstr "Domovská stránka:"
#: forumdirectory.php:164
msgid "About:"
msgstr "O mě:"
#: forumdirectory.php:201
msgid "No entries (some entries may be hidden)."
msgstr "Žádné záznamy (některé položky mohou být skryty)."

View file

@ -0,0 +1,22 @@
<?php
if(! function_exists("string_plural_select_cs")) {
function string_plural_select_cs($n){
$n = intval($n);
if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; }
}}
$a->strings['Forum Directory'] = 'Adresář fór';
$a->strings['Public access denied.'] = 'Veřejný přístup odepřen.';
$a->strings['Global Directory'] = 'Globální adresář';
$a->strings['Find on this site'] = 'Najít na tomto webu';
$a->strings['Finding: '] = 'Hledání: ';
$a->strings['Site Directory'] = 'Adresář serveru';
$a->strings['Find'] = 'Najít';
$a->strings['Age: '] = 'Věk: ';
$a->strings['Gender: '] = 'Pohlaví: ';
$a->strings['Location:'] = 'Poloha:';
$a->strings['Gender:'] = 'Pohlaví:';
$a->strings['Status:'] = 'Stav:';
$a->strings['Homepage:'] = 'Domovská stránka:';
$a->strings['About:'] = 'O mě:';
$a->strings['No entries (some entries may be hidden).'] = 'Žádné záznamy (některé položky mohou být skryty).';

View file

@ -0,0 +1,48 @@
# ADDON forumdirectory
# Copyright (C)
# This file is distributed under the same license as the Friendica forumdirectory addon package.
#
#
# Translators:
# Anton <dev@atjn.dk>, 2022
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
"PO-Revision-Date: 2014-06-22 12:31+0000\n"
"Last-Translator: Anton <dev@atjn.dk>, 2022\n"
"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: da_DK\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: forumdirectory.php:33 forumdirectory.php:137
msgid "Forum Directory"
msgstr "Forum adressebog"
#: forumdirectory.php:53
msgid "Public access denied."
msgstr "Offentlig adgang nægtet."
#: forumdirectory.php:125
msgid "No entries (some entries may be hidden)."
msgstr "Ingen poster (nogle poster er måske skjulte)."
#: forumdirectory.php:131
msgid "Global Directory"
msgstr "Global adressebog"
#: forumdirectory.php:133
msgid "Find on this site"
msgstr "Find på denne side"
#: forumdirectory.php:135
msgid "Results for:"
msgstr "Resultater for:"
#: forumdirectory.php:139
msgid "Find"
msgstr "Find"

View file

@ -0,0 +1,14 @@
<?php
if(! function_exists("string_plural_select_da_dk")) {
function string_plural_select_da_dk($n){
$n = intval($n);
return intval($n != 1);
}}
$a->strings['Forum Directory'] = 'Forum adressebog';
$a->strings['Public access denied.'] = 'Offentlig adgang nægtet.';
$a->strings['No entries (some entries may be hidden).'] = 'Ingen poster (nogle poster er måske skjulte).';
$a->strings['Global Directory'] = 'Global adressebog';
$a->strings['Find on this site'] = 'Find på denne side';
$a->strings['Results for:'] = 'Resultater for:';
$a->strings['Find'] = 'Find';

View file

@ -0,0 +1,49 @@
# ADDON forumdirectory
# Copyright (C)
# This file is distributed under the same license as the Friendica forumdirectory addon package.
#
#
# Translators:
# Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2014
# Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2021
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
"PO-Revision-Date: 2014-06-22 12:31+0000\n"
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2021\n"
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: forumdirectory.php:33 forumdirectory.php:137
msgid "Forum Directory"
msgstr "Foren Verzeichnis"
#: forumdirectory.php:53
msgid "Public access denied."
msgstr "Öffentlicher Zugriff verweigert."
#: forumdirectory.php:125
msgid "No entries (some entries may be hidden)."
msgstr "Keine Einträge (einige Einträge könnten versteckt sein)."
#: forumdirectory.php:131
msgid "Global Directory"
msgstr "Weltweites Verzeichnis"
#: forumdirectory.php:133
msgid "Find on this site"
msgstr "Auf diesem Server suchen"
#: forumdirectory.php:135
msgid "Results for:"
msgstr "Ergebnis für:"
#: forumdirectory.php:139
msgid "Find"
msgstr "Finde"

View file

@ -0,0 +1,14 @@
<?php
if(! function_exists("string_plural_select_de")) {
function string_plural_select_de($n){
$n = intval($n);
return intval($n != 1);
}}
$a->strings['Forum Directory'] = 'Foren Verzeichnis';
$a->strings['Public access denied.'] = 'Öffentlicher Zugriff verweigert.';
$a->strings['No entries (some entries may be hidden).'] = 'Keine Einträge (einige Einträge könnten versteckt sein).';
$a->strings['Global Directory'] = 'Weltweites Verzeichnis';
$a->strings['Find on this site'] = 'Auf diesem Server suchen';
$a->strings['Results for:'] = 'Ergebnis für:';
$a->strings['Find'] = 'Finde';

View file

@ -0,0 +1,16 @@
<?php
$a->strings["Public access denied."] = "Publika atingo ne permesita.";
$a->strings["Global Directory"] = "Tutmonda Katalogo";
$a->strings["Find on this site"] = "Trovi en ĉi retejo";
$a->strings["Finding: "] = "Trovata:";
$a->strings["Site Directory"] = "Reteja Katalogo";
$a->strings["Find"] = "Trovi";
$a->strings["Age: "] = "Aĝo:";
$a->strings["Gender: "] = "Sekso:";
$a->strings["Location:"] = "Loko:";
$a->strings["Gender:"] = "Sekso:";
$a->strings["Status:"] = "Stato:";
$a->strings["Homepage:"] = "Hejmpaĝo:";
$a->strings["About:"] = "Pri:";
$a->strings["No entries (some entries may be hidden)."] = "Neniom da afiŝoj (kelkaj afiŝoj eble ne estas videbla).";

View file

@ -0,0 +1,49 @@
# ADDON forumdirectory
# Copyright (C)
# This file is distributed under the same license as the Friendica forumdirectory addon package.
#
#
# Translators:
# Albert, 2016
# Senex Petrovic <javierruizo@hotmail.com>, 2021
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
"PO-Revision-Date: 2021-04-01 09:54+0000\n"
"Last-Translator: Senex Petrovic <javierruizo@hotmail.com>\n"
"Language-Team: Spanish (http://www.transifex.com/Friendica/friendica/language/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: forumdirectory.php:33 forumdirectory.php:137
msgid "Forum Directory"
msgstr "Directorio de foro"
#: forumdirectory.php:53
msgid "Public access denied."
msgstr "Acceso público denegado."
#: forumdirectory.php:125
msgid "No entries (some entries may be hidden)."
msgstr "Sin entradas (algunas entradas pueden estar ocultas)."
#: forumdirectory.php:131
msgid "Global Directory"
msgstr "Directorio global"
#: forumdirectory.php:133
msgid "Find on this site"
msgstr "Encontrar en esta página"
#: forumdirectory.php:135
msgid "Results for:"
msgstr "Resultados para:"
#: forumdirectory.php:139
msgid "Find"
msgstr "Encontrar"

View file

@ -0,0 +1,14 @@
<?php
if(! function_exists("string_plural_select_es")) {
function string_plural_select_es($n){
$n = intval($n);
return intval($n != 1);
}}
$a->strings['Forum Directory'] = 'Directorio de foro';
$a->strings['Public access denied.'] = 'Acceso público denegado.';
$a->strings['No entries (some entries may be hidden).'] = 'Sin entradas (algunas entradas pueden estar ocultas).';
$a->strings['Global Directory'] = 'Directorio global';
$a->strings['Find on this site'] = 'Encontrar en esta página';
$a->strings['Results for:'] = 'Resultados para:';
$a->strings['Find'] = 'Encontrar';

View file

@ -0,0 +1,81 @@
# ADDON forumdirectory
# Copyright (C)
# This file is distributed under the same license as the Friendica forumdirectory addon package.
#
#
# Translators:
# Kris, 2018
# Kris, 2018
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-02-27 05:01-0500\n"
"PO-Revision-Date: 2018-05-12 12:50+0000\n"
"Last-Translator: Kris\n"
"Language-Team: Finnish (Finland) (http://www.transifex.com/Friendica/friendica/language/fi_FI/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: fi_FI\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: forumdirectory.php:22
msgid "Forum Directory"
msgstr "Foorumihakemisto"
#: forumdirectory.php:53
msgid "Public access denied."
msgstr "Julkinen käyttö estetty."
#: forumdirectory.php:71
msgid "Global Directory"
msgstr "Maailmanlaajuinen hakemisto"
#: forumdirectory.php:79
msgid "Find on this site"
msgstr "Sivustohaku"
#: forumdirectory.php:81
msgid "Finding: "
msgstr ""
#: forumdirectory.php:82
msgid "Site Directory"
msgstr "Sivustoluettelo"
#: forumdirectory.php:83
msgid "Find"
msgstr "Etsi"
#: forumdirectory.php:133
msgid "Age: "
msgstr "Ikä:"
#: forumdirectory.php:136
msgid "Gender: "
msgstr "Sukupuoli:"
#: forumdirectory.php:156
msgid "Location:"
msgstr "Sijainti:"
#: forumdirectory.php:158
msgid "Gender:"
msgstr "Sukupuoli:"
#: forumdirectory.php:160
msgid "Status:"
msgstr "Tila:"
#: forumdirectory.php:162
msgid "Homepage:"
msgstr "Kotisivu:"
#: forumdirectory.php:164
msgid "About:"
msgstr "Lisätietoja:"
#: forumdirectory.php:201
msgid "No entries (some entries may be hidden)."
msgstr "Ei kohteita (jotkut kohteet saattaa olla piilotettuja)."

View file

@ -0,0 +1,21 @@
<?php
if(! function_exists("string_plural_select_fi_fi")) {
function string_plural_select_fi_fi($n){
$n = intval($n);
return intval($n != 1);
}}
$a->strings['Forum Directory'] = 'Foorumihakemisto';
$a->strings['Public access denied.'] = 'Julkinen käyttö estetty.';
$a->strings['Global Directory'] = 'Maailmanlaajuinen hakemisto';
$a->strings['Find on this site'] = 'Sivustohaku';
$a->strings['Site Directory'] = 'Sivustoluettelo';
$a->strings['Find'] = 'Etsi';
$a->strings['Age: '] = 'Ikä:';
$a->strings['Gender: '] = 'Sukupuoli:';
$a->strings['Location:'] = 'Sijainti:';
$a->strings['Gender:'] = 'Sukupuoli:';
$a->strings['Status:'] = 'Tila:';
$a->strings['Homepage:'] = 'Kotisivu:';
$a->strings['About:'] = 'Lisätietoja:';
$a->strings['No entries (some entries may be hidden).'] = 'Ei kohteita (jotkut kohteet saattaa olla piilotettuja).';

View file

@ -0,0 +1,51 @@
# ADDON forumdirectory
# Copyright (C)
# This file is distributed under the same license as the Friendica forumdirectory addon package.
#
#
# Translators:
# bob lebonche <lebonche@tutanota.com>, 2021
# Hypolite Petovan <hypolite@mrpetovan.com>, 2016
# StefOfficiel <pichard.stephane@free.fr>, 2015
# Valvin <vincent-forum@valvin.fr>, 2019
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
"PO-Revision-Date: 2014-06-22 12:31+0000\n"
"Last-Translator: bob lebonche <lebonche@tutanota.com>, 2021\n"
"Language-Team: French (http://www.transifex.com/Friendica/friendica/language/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: fr\n"
"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
#: forumdirectory.php:33 forumdirectory.php:137
msgid "Forum Directory"
msgstr "Annuaire de Forums"
#: forumdirectory.php:53
msgid "Public access denied."
msgstr "Accès public refusé."
#: forumdirectory.php:125
msgid "No entries (some entries may be hidden)."
msgstr "Pas de résultats (certains résultats peuvent être cachés)."
#: forumdirectory.php:131
msgid "Global Directory"
msgstr "Annuaire Global"
#: forumdirectory.php:133
msgid "Find on this site"
msgstr "Trouver sur cette instance"
#: forumdirectory.php:135
msgid "Results for:"
msgstr "Résultats pour :"
#: forumdirectory.php:139
msgid "Find"
msgstr "Chercher"

View file

@ -0,0 +1,14 @@
<?php
if(! function_exists("string_plural_select_fr")) {
function string_plural_select_fr($n){
$n = intval($n);
if (($n == 0 || $n == 1)) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; }
}}
$a->strings['Forum Directory'] = 'Annuaire de Forums';
$a->strings['Public access denied.'] = 'Accès public refusé.';
$a->strings['No entries (some entries may be hidden).'] = 'Pas de résultats (certains résultats peuvent être cachés).';
$a->strings['Global Directory'] = 'Annuaire Global';
$a->strings['Find on this site'] = 'Trouver sur cette instance';
$a->strings['Results for:'] = 'Résultats pour :';
$a->strings['Find'] = 'Chercher';

View file

@ -0,0 +1,48 @@
# ADDON forumdirectory
# Copyright (C)
# This file is distributed under the same license as the Friendica forumdirectory addon package.
#
#
# Translators:
# Balázs Úr, 2020-2021
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
"PO-Revision-Date: 2014-06-22 12:31+0000\n"
"Last-Translator: Balázs Úr, 2020-2021\n"
"Language-Team: Hungarian (http://www.transifex.com/Friendica/friendica/language/hu/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: hu\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: forumdirectory.php:33 forumdirectory.php:137
msgid "Forum Directory"
msgstr "Fórumkönyvtár"
#: forumdirectory.php:53
msgid "Public access denied."
msgstr "Nyilvános hozzáférés megtagadva."
#: forumdirectory.php:125
msgid "No entries (some entries may be hidden)."
msgstr "Nincsenek bejegyzések (néhány bejegyzés rejtve lehet)."
#: forumdirectory.php:131
msgid "Global Directory"
msgstr "Globális könyvtár"
#: forumdirectory.php:133
msgid "Find on this site"
msgstr "Keresés ezen az oldalon"
#: forumdirectory.php:135
msgid "Results for:"
msgstr "Találatok ehhez:"
#: forumdirectory.php:139
msgid "Find"
msgstr "Keresés"

View file

@ -0,0 +1,14 @@
<?php
if(! function_exists("string_plural_select_hu")) {
function string_plural_select_hu($n){
$n = intval($n);
return intval($n != 1);
}}
$a->strings['Forum Directory'] = 'Fórumkönyvtár';
$a->strings['Public access denied.'] = 'Nyilvános hozzáférés megtagadva.';
$a->strings['No entries (some entries may be hidden).'] = 'Nincsenek bejegyzések (néhány bejegyzés rejtve lehet).';
$a->strings['Global Directory'] = 'Globális könyvtár';
$a->strings['Find on this site'] = 'Keresés ezen az oldalon';
$a->strings['Results for:'] = 'Találatok ehhez:';
$a->strings['Find'] = 'Keresés';

View file

@ -0,0 +1,16 @@
<?php
$a->strings["Public access denied."] = "Alemennings aðgangur ekki veittur.";
$a->strings["Global Directory"] = "Heims tengiliða skrá";
$a->strings["Find on this site"] = "Leita á þessum vef";
$a->strings["Finding: "] = "Niðurstöður:";
$a->strings["Site Directory"] = "Vef tengiliða skrá";
$a->strings["Find"] = "Finna";
$a->strings["Age: "] = "Aldur:";
$a->strings["Gender: "] = "Kyn:";
$a->strings["Location:"] = "Staðsetning:";
$a->strings["Gender:"] = "Kyn:";
$a->strings["Status:"] = "Staða:";
$a->strings["Homepage:"] = "Heimasíða:";
$a->strings["About:"] = "Um:";
$a->strings["No entries (some entries may be hidden)."] = "Engar færslur (sumar geta verið faldar).";

View file

@ -0,0 +1,49 @@
# ADDON forumdirectory
# Copyright (C)
# This file is distributed under the same license as the Friendica forumdirectory addon package.
#
#
# Translators:
# fabrixxm <fabrix.xm@gmail.com>, 2014
# Sylke Vicious <silkevicious@gmail.com>, 2021
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
"PO-Revision-Date: 2021-02-16 12:56+0000\n"
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>\n"
"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: forumdirectory.php:33 forumdirectory.php:137
msgid "Forum Directory"
msgstr "Elenco Forum"
#: forumdirectory.php:53
msgid "Public access denied."
msgstr "Accesso negato."
#: forumdirectory.php:125
msgid "No entries (some entries may be hidden)."
msgstr "Nessuna voce (qualche voce potrebbe essere nascosta)."
#: forumdirectory.php:131
msgid "Global Directory"
msgstr "Elenco globale"
#: forumdirectory.php:133
msgid "Find on this site"
msgstr "Cerca nel sito"
#: forumdirectory.php:135
msgid "Results for:"
msgstr "Risultati per:"
#: forumdirectory.php:139
msgid "Find"
msgstr "Trova"

View file

@ -0,0 +1,14 @@
<?php
if(! function_exists("string_plural_select_it")) {
function string_plural_select_it($n){
$n = intval($n);
return intval($n != 1);
}}
$a->strings['Forum Directory'] = 'Elenco Forum';
$a->strings['Public access denied.'] = 'Accesso negato.';
$a->strings['No entries (some entries may be hidden).'] = 'Nessuna voce (qualche voce potrebbe essere nascosta).';
$a->strings['Global Directory'] = 'Elenco globale';
$a->strings['Find on this site'] = 'Cerca nel sito';
$a->strings['Results for:'] = 'Risultati per:';
$a->strings['Find'] = 'Trova';

View file

@ -0,0 +1,17 @@
<?php
$a->strings["Forum Directory"] = "";
$a->strings["Public access denied."] = "Offentlig tilgang ikke tillatt.";
$a->strings["Global Directory"] = "Global katalog";
$a->strings["Find on this site"] = "";
$a->strings["Finding: "] = "Fant:";
$a->strings["Site Directory"] = "Stedets katalog";
$a->strings["Find"] = "Finn";
$a->strings["Age: "] = "Alder:";
$a->strings["Gender: "] = "Kjønn:";
$a->strings["Location:"] = "Plassering:";
$a->strings["Gender:"] = "Kjønn:";
$a->strings["Status:"] = "Status:";
$a->strings["Homepage:"] = "Hjemmeside:";
$a->strings["About:"] = "Om:";
$a->strings["No entries (some entries may be hidden)."] = "Ingen oppføringer (noen oppføringer kan være skjulte).";

View file

@ -0,0 +1,80 @@
# ADDON forumdirectory
# Copyright (C)
# This file is distributed under the same license as the Friendica forumdirectory addon package.
#
#
# Translators:
# Jeroen De Meerleer <me@jeroened.be>, 2018
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-02-27 05:01-0500\n"
"PO-Revision-Date: 2018-08-24 13:21+0000\n"
"Last-Translator: Jeroen De Meerleer <me@jeroened.be>\n"
"Language-Team: Dutch (http://www.transifex.com/Friendica/friendica/language/nl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: nl\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: forumdirectory.php:22
msgid "Forum Directory"
msgstr "Forum index"
#: forumdirectory.php:53
msgid "Public access denied."
msgstr "Publieke toegang geweigerd"
#: forumdirectory.php:71
msgid "Global Directory"
msgstr "Globaal overzicht"
#: forumdirectory.php:79
msgid "Find on this site"
msgstr "Zoeken"
#: forumdirectory.php:81
msgid "Finding: "
msgstr "Zoeken..."
#: forumdirectory.php:82
msgid "Site Directory"
msgstr "Site overzicht"
#: forumdirectory.php:83
msgid "Find"
msgstr "Zoek"
#: forumdirectory.php:133
msgid "Age: "
msgstr "Leeftijd:"
#: forumdirectory.php:136
msgid "Gender: "
msgstr "Geslacht:"
#: forumdirectory.php:156
msgid "Location:"
msgstr "Woonplaats:"
#: forumdirectory.php:158
msgid "Gender:"
msgstr "Geslacht:"
#: forumdirectory.php:160
msgid "Status:"
msgstr "Status:"
#: forumdirectory.php:162
msgid "Homepage:"
msgstr "Website:"
#: forumdirectory.php:164
msgid "About:"
msgstr "Over:"
#: forumdirectory.php:201
msgid "No entries (some entries may be hidden)."
msgstr "Geen berichten (sommige berichten kunnen verborgen zijn)."

View file

@ -0,0 +1,22 @@
<?php
if(! function_exists("string_plural_select_nl")) {
function string_plural_select_nl($n){
$n = intval($n);
return intval($n != 1);
}}
$a->strings['Forum Directory'] = 'Forum index';
$a->strings['Public access denied.'] = 'Publieke toegang geweigerd';
$a->strings['Global Directory'] = 'Globaal overzicht';
$a->strings['Find on this site'] = 'Zoeken';
$a->strings['Finding: '] = 'Zoeken...';
$a->strings['Site Directory'] = 'Site overzicht';
$a->strings['Find'] = 'Zoek';
$a->strings['Age: '] = 'Leeftijd:';
$a->strings['Gender: '] = 'Geslacht:';
$a->strings['Location:'] = 'Woonplaats:';
$a->strings['Gender:'] = 'Geslacht:';
$a->strings['Status:'] = 'Status:';
$a->strings['Homepage:'] = 'Website:';
$a->strings['About:'] = 'Over:';
$a->strings['No entries (some entries may be hidden).'] = 'Geen berichten (sommige berichten kunnen verborgen zijn).';

View file

@ -0,0 +1,50 @@
# ADDON forumdirectory
# Copyright (C)
# This file is distributed under the same license as the Friendica forumdirectory addon package.
#
#
# Translators:
# TORminator <dominik+foss@danelski.pl>, 2015
# Piotr Strębski <strebski@gmail.com>, 2022
# Waldemar Stoczkowski, 2018
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
"PO-Revision-Date: 2014-06-22 12:31+0000\n"
"Last-Translator: Piotr Strębski <strebski@gmail.com>, 2022\n"
"Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: pl\n"
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
#: forumdirectory.php:33 forumdirectory.php:137
msgid "Forum Directory"
msgstr "Katalog forum"
#: forumdirectory.php:53
msgid "Public access denied."
msgstr "Odmowa dostępu publicznego."
#: forumdirectory.php:125
msgid "No entries (some entries may be hidden)."
msgstr "Brak wpisów (niektóre wpisy mogą być ukryte)."
#: forumdirectory.php:131
msgid "Global Directory"
msgstr "Globalny katalog"
#: forumdirectory.php:133
msgid "Find on this site"
msgstr "Znajdź na tej stronie"
#: forumdirectory.php:135
msgid "Results for:"
msgstr "Wyniki dla:"
#: forumdirectory.php:139
msgid "Find"
msgstr "Szukaj"

View file

@ -0,0 +1,14 @@
<?php
if(! function_exists("string_plural_select_pl")) {
function string_plural_select_pl($n){
$n = intval($n);
if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; }
}}
$a->strings['Forum Directory'] = 'Katalog forum';
$a->strings['Public access denied.'] = 'Odmowa dostępu publicznego.';
$a->strings['No entries (some entries may be hidden).'] = 'Brak wpisów (niektóre wpisy mogą być ukryte).';
$a->strings['Global Directory'] = 'Globalny katalog';
$a->strings['Find on this site'] = 'Znajdź na tej stronie';
$a->strings['Results for:'] = 'Wyniki dla:';
$a->strings['Find'] = 'Szukaj';

View file

@ -0,0 +1,80 @@
# ADDON forumdirectory
# Copyright (C)
# This file is distributed under the same license as the Friendica forumdirectory addon package.
#
#
# Translators:
# Beatriz Vital <vitalb@riseup.net>, 2016
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-02-27 05:01-0500\n"
"PO-Revision-Date: 2016-08-19 17:03+0000\n"
"Last-Translator: Beatriz Vital <vitalb@riseup.net>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/Friendica/friendica/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: pt_BR\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: forumdirectory.php:22
msgid "Forum Directory"
msgstr "Diretório de Fóruns"
#: forumdirectory.php:53
msgid "Public access denied."
msgstr "Acesso do público negado."
#: forumdirectory.php:71
msgid "Global Directory"
msgstr "Diretório Global"
#: forumdirectory.php:79
msgid "Find on this site"
msgstr "Procurar neste site"
#: forumdirectory.php:81
msgid "Finding: "
msgstr "Procurando:"
#: forumdirectory.php:82
msgid "Site Directory"
msgstr "Diretório do Site"
#: forumdirectory.php:83
msgid "Find"
msgstr "Procurar"
#: forumdirectory.php:133
msgid "Age: "
msgstr "Idade:"
#: forumdirectory.php:136
msgid "Gender: "
msgstr "Sexo:"
#: forumdirectory.php:156
msgid "Location:"
msgstr "Local:"
#: forumdirectory.php:158
msgid "Gender:"
msgstr "Sexo:"
#: forumdirectory.php:160
msgid "Status:"
msgstr "Estado:"
#: forumdirectory.php:162
msgid "Homepage:"
msgstr "Página principal:"
#: forumdirectory.php:164
msgid "About:"
msgstr "Sobre:"
#: forumdirectory.php:201
msgid "No entries (some entries may be hidden)."
msgstr "Sem resultados (alguns resultados podem estar ocultos)."

View file

@ -0,0 +1,22 @@
<?php
if(! function_exists("string_plural_select_pt_br")) {
function string_plural_select_pt_br($n){
$n = intval($n);
return intval($n > 1);
}}
$a->strings['Forum Directory'] = 'Diretório de Fóruns';
$a->strings['Public access denied.'] = 'Acesso do público negado.';
$a->strings['Global Directory'] = 'Diretório Global';
$a->strings['Find on this site'] = 'Procurar neste site';
$a->strings['Finding: '] = 'Procurando:';
$a->strings['Site Directory'] = 'Diretório do Site';
$a->strings['Find'] = 'Procurar';
$a->strings['Age: '] = 'Idade:';
$a->strings['Gender: '] = 'Sexo:';
$a->strings['Location:'] = 'Local:';
$a->strings['Gender:'] = 'Sexo:';
$a->strings['Status:'] = 'Estado:';
$a->strings['Homepage:'] = 'Página principal:';
$a->strings['About:'] = 'Sobre:';
$a->strings['No entries (some entries may be hidden).'] = 'Sem resultados (alguns resultados podem estar ocultos).';

View file

@ -0,0 +1,79 @@
# ADDON forumdirectory
# Copyright (C)
# This file is distributed under the same license as the Friendica forumdirectory addon package.
#
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-02-27 05:01-0500\n"
"PO-Revision-Date: 2014-07-08 11:49+0000\n"
"Last-Translator: Arian - Cazare Muncitori <arianserv@gmail.com>\n"
"Language-Team: Romanian (Romania) (http://www.transifex.com/projects/p/friendica/language/ro_RO/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ro_RO\n"
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
#: forumdirectory.php:22
msgid "Forum Directory"
msgstr "Director Forum"
#: forumdirectory.php:53
msgid "Public access denied."
msgstr "Acces public refuzat."
#: forumdirectory.php:71
msgid "Global Directory"
msgstr "Director Global"
#: forumdirectory.php:79
msgid "Find on this site"
msgstr "Căutați pe acest site"
#: forumdirectory.php:81
msgid "Finding: "
msgstr "Căutare:"
#: forumdirectory.php:82
msgid "Site Directory"
msgstr "Director Site"
#: forumdirectory.php:83
msgid "Find"
msgstr "Căutați"
#: forumdirectory.php:133
msgid "Age: "
msgstr "Vârsta:"
#: forumdirectory.php:136
msgid "Gender: "
msgstr "Sex:"
#: forumdirectory.php:156
msgid "Location:"
msgstr "Locație:"
#: forumdirectory.php:158
msgid "Gender:"
msgstr "Sex:"
#: forumdirectory.php:160
msgid "Status:"
msgstr "Status:"
#: forumdirectory.php:162
msgid "Homepage:"
msgstr "Pagină web:"
#: forumdirectory.php:164
msgid "About:"
msgstr "Despre:"
#: forumdirectory.php:201
msgid "No entries (some entries may be hidden)."
msgstr "Fără înregistrări (unele înregistrări pot fi ascunse)."

View file

@ -0,0 +1,22 @@
<?php
if(! function_exists("string_plural_select_ro")) {
function string_plural_select_ro($n){
$n = intval($n);
if ($n==1) { return 0; } else if ((($n%100>19)||(($n%100==0)&&($n!=0)))) { return 2; } else { return 1; }
}}
$a->strings['Forum Directory'] = 'Director Forum';
$a->strings['Public access denied.'] = 'Acces public refuzat.';
$a->strings['Global Directory'] = 'Director Global';
$a->strings['Find on this site'] = 'Căutați pe acest site';
$a->strings['Finding: '] = 'Căutare:';
$a->strings['Site Directory'] = 'Director Site';
$a->strings['Find'] = 'Căutați';
$a->strings['Age: '] = 'Vârsta:';
$a->strings['Gender: '] = 'Sex:';
$a->strings['Location:'] = 'Locație:';
$a->strings['Gender:'] = 'Sex:';
$a->strings['Status:'] = 'Status:';
$a->strings['Homepage:'] = 'Pagină web:';
$a->strings['About:'] = 'Despre:';
$a->strings['No entries (some entries may be hidden).'] = 'Fără înregistrări (unele înregistrări pot fi ascunse).';

View file

@ -0,0 +1,80 @@
# ADDON forumdirectory
# Copyright (C)
# This file is distributed under the same license as the Friendica forumdirectory addon package.
#
#
# Translators:
# Stanislav N. <pztrn@pztrn.name>, 2017
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-02-27 05:01-0500\n"
"PO-Revision-Date: 2017-04-08 17:12+0000\n"
"Last-Translator: Stanislav N. <pztrn@pztrn.name>\n"
"Language-Team: Russian (http://www.transifex.com/Friendica/friendica/language/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ru\n"
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
#: forumdirectory.php:22
msgid "Forum Directory"
msgstr "Каталог форумов"
#: forumdirectory.php:53
msgid "Public access denied."
msgstr "Свободный доступ закрыт."
#: forumdirectory.php:71
msgid "Global Directory"
msgstr "Глобальный каталог"
#: forumdirectory.php:79
msgid "Find on this site"
msgstr "Найти на этом сайте"
#: forumdirectory.php:81
msgid "Finding: "
msgstr "Результат поиска: "
#: forumdirectory.php:82
msgid "Site Directory"
msgstr "Каталог сайта"
#: forumdirectory.php:83
msgid "Find"
msgstr "Найти"
#: forumdirectory.php:133
msgid "Age: "
msgstr "Возраст: "
#: forumdirectory.php:136
msgid "Gender: "
msgstr "Пол: "
#: forumdirectory.php:156
msgid "Location:"
msgstr "Откуда:"
#: forumdirectory.php:158
msgid "Gender:"
msgstr "Пол:"
#: forumdirectory.php:160
msgid "Status:"
msgstr "Статус:"
#: forumdirectory.php:162
msgid "Homepage:"
msgstr "Домашняя страничка:"
#: forumdirectory.php:164
msgid "About:"
msgstr "О себе:"
#: forumdirectory.php:201
msgid "No entries (some entries may be hidden)."
msgstr "Нет записей (некоторые записи могут быть скрыты)."

View file

@ -0,0 +1,22 @@
<?php
if(! function_exists("string_plural_select_ru")) {
function string_plural_select_ru($n){
$n = intval($n);
if ($n%10==1 && $n%100!=11) { return 0; } else if ($n%10>=2 && $n%10<=4 && ($n%100<12 || $n%100>14)) { return 1; } else if ($n%10==0 || ($n%10>=5 && $n%10<=9) || ($n%100>=11 && $n%100<=14)) { return 2; } else { return 3; }
}}
$a->strings['Forum Directory'] = 'Каталог форумов';
$a->strings['Public access denied.'] = 'Свободный доступ закрыт.';
$a->strings['Global Directory'] = 'Глобальный каталог';
$a->strings['Find on this site'] = 'Найти на этом сайте';
$a->strings['Finding: '] = 'Результат поиска: ';
$a->strings['Site Directory'] = 'Каталог сайта';
$a->strings['Find'] = 'Найти';
$a->strings['Age: '] = 'Возраст: ';
$a->strings['Gender: '] = 'Пол: ';
$a->strings['Location:'] = 'Откуда:';
$a->strings['Gender:'] = 'Пол:';
$a->strings['Status:'] = 'Статус:';
$a->strings['Homepage:'] = 'Домашняя страничка:';
$a->strings['About:'] = 'О себе:';
$a->strings['No entries (some entries may be hidden).'] = 'Нет записей (некоторые записи могут быть скрыты).';

View file

@ -0,0 +1,49 @@
# ADDON forumdirectory
# Copyright (C)
# This file is distributed under the same license as the Friendica forumdirectory addon package.
#
#
# Translators:
# Hypolite Petovan <hypolite@mrpetovan.com>, 2019
# Kristoffer Grundström <lovaren@gmail.com>, 2022
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
"PO-Revision-Date: 2022-01-15 23:39+0000\n"
"Last-Translator: Kristoffer Grundström <lovaren@gmail.com>\n"
"Language-Team: Swedish (http://www.transifex.com/Friendica/friendica/language/sv/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: sv\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: forumdirectory.php:33 forumdirectory.php:137
msgid "Forum Directory"
msgstr "Forum-mapp"
#: forumdirectory.php:53
msgid "Public access denied."
msgstr "Publik åtkomst nekades."
#: forumdirectory.php:125
msgid "No entries (some entries may be hidden)."
msgstr "Inget att visa. (Man kan välja att inte synas här)"
#: forumdirectory.php:131
msgid "Global Directory"
msgstr "Medlemskatalog för flera sajter (global)"
#: forumdirectory.php:133
msgid "Find on this site"
msgstr "Hitta på den här sidan"
#: forumdirectory.php:135
msgid "Results for:"
msgstr ""
#: forumdirectory.php:139
msgid "Find"
msgstr "Sök"

View file

@ -0,0 +1,13 @@
<?php
if(! function_exists("string_plural_select_sv")) {
function string_plural_select_sv($n){
$n = intval($n);
return intval($n != 1);
}}
$a->strings['Forum Directory'] = 'Forum-mapp';
$a->strings['Public access denied.'] = 'Publik åtkomst nekades.';
$a->strings['No entries (some entries may be hidden).'] = 'Inget att visa. (Man kan välja att inte synas här)';
$a->strings['Global Directory'] = 'Medlemskatalog för flera sajter (global)';
$a->strings['Find on this site'] = 'Hitta på den här sidan';
$a->strings['Find'] = 'Sök';

View file

@ -0,0 +1,17 @@
<?php
$a->strings["Forum Directory"] = "评坛目录";
$a->strings["Public access denied."] = "公众看拒绝";
$a->strings["Global Directory"] = "综合目录";
$a->strings["Find on this site"] = "找在这网站";
$a->strings["Finding: "] = "找着:";
$a->strings["Site Directory"] = "网站目录";
$a->strings["Find"] = "搜索";
$a->strings["Age: "] = "年纪:";
$a->strings["Gender: "] = "性别:";
$a->strings["Location:"] = "位置:";
$a->strings["Gender:"] = "性别:";
$a->strings["Status:"] = "现状:";
$a->strings["Homepage:"] = "主页:";
$a->strings["About:"] = "关于:";
$a->strings["No entries (some entries may be hidden)."] = "没有文章(有的文章会被隐藏)。";

View file

@ -55,7 +55,7 @@ function ifttt_settings(array &$data)
'new_photo_upload_body' => DI::l10n()->t('Body for "new photo upload"'),
'new_link_post_body' => DI::l10n()->t('Body for "new link post"'),
],
'$url' => DI::baseUrl()->get() . '/ifttt/' . DI::userSession()->getLocalUserNickname(),
'$url' => DI::baseUrl() . '/ifttt/' . DI::userSession()->getLocalUserNickname(),
'$new_status_message_body' => 'key=' . $key . '&type=status&msg=<<<{{Message}}>>>&date=<<<{{UpdatedAt}}>>>&url=<<<{{PageUrl}}>>>',
'$new_photo_upload_body' => 'key=' . $key . '&type=photo&link=<<<{{Link}}>>>&image=<<<{{ImageSource}}>>>&msg=<<<{{Caption}}>>>&date=<<<{{CreatedAt}}>>>&url=<<<{{PageUrl}}>>>',
'$new_link_post_body' => 'key=' . $key . '&type=link&link=<<<{{Link}}>>>&title=<<<{{Title}}>>>&msg=<<<{{Message}}>>>&description=<<<{{Description}}>>>&date=<<<{{CreatedAt}}>>>&url=<<<{{PageUrl}}>>>',

View file

@ -16,7 +16,7 @@ msgstr ""
"POT-Creation-Date: 2021-11-21 19:17-0500\n"
"PO-Revision-Date: 2017-11-27 10:37+0000\n"
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2022\n"
"Language-Team: German (https://www.transifex.com/Friendica/teams/12172/de/)\n"
"Language-Team: German (https://app.transifex.com/Friendica/teams/12172/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -13,9 +13,9 @@ msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-11-21 19:17-0500\n"
"PO-Revision-Date: 2021-12-22 16:19+0000\n"
"Last-Translator: Transifex Bot <>\n"
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
"PO-Revision-Date: 2014-06-23 08:37+0000\n"
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2018,2021\n"
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -14,7 +14,7 @@ use Friendica\Core\Logger;
use Friendica\Core\Renderer;
use Friendica\DI;
use Friendica\Core\Config\Util\ConfigFileManager;
use Friendica\Util\Proxy as ProxyUtils;
use Friendica\Model\User;
function impressum_install()
{
@ -45,10 +45,10 @@ function obfuscate_email (string $s): string
function impressum_footer(string &$body)
{
$text = ProxyUtils::proxifyHtml(BBCode::convert(DI::config()->get('impressum', 'footer_text')));
$text = BBCode::convertForUriId(User::getSystemUriId(), DI::config()->get('impressum', 'footer_text'));
if ($text != '') {
DI::page()['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="' . DI::baseUrl()->get() . '/addon/impressum/impressum.css" media="all" />';
DI::page()['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="' . DI::baseUrl() . '/addon/impressum/impressum.css" media="all" />';
$body .= '<div class="clear"></div>';
$body .= '<div id="impressum_footer">' . $text . '</div>';
}
@ -64,8 +64,8 @@ function impressum_show(string &$body)
$body .= '<h3>' . DI::l10n()->t('Impressum') . '</h3>';
$owner = DI::config()->get('impressum', 'owner');
$owner_profile = DI::config()->get('impressum', 'ownerprofile');
$postal = ProxyUtils::proxifyHtml(BBCode::convert(DI::config()->get('impressum', 'postal')));
$notes = ProxyUtils::proxifyHtml(BBCode::convert(DI::config()->get('impressum', 'notes')));
$postal = BBCode::convertForUriId(User::getSystemUriId(), DI::config()->get('impressum', 'postal'));
$notes = BBCode::convertForUriId(User::getSystemUriId(), DI::config()->get('impressum', 'notes'));
if ($owner) {
if ($owner_profile) {

View file

@ -13,9 +13,9 @@ msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
"PO-Revision-Date: 2021-03-29 05:29+0000\n"
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>\n"
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
"PO-Revision-Date: 2014-06-23 08:39+0000\n"
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2021\n"
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -30,13 +30,12 @@ function infiniteimprobabilitydrive_module() {}
function infiniteimprobabilitydrive_content()
{
$baseurl = DI::baseUrl()->get() . '/addon/infiniteimprobabilitydrive';
$o = '';
DI::page()['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="'.DI::baseUrl()->get().'/addon/infiniteimprobabilitydrive/infiniteimprobabilitydrive.css"/>';
DI::page()['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="'.DI::baseUrl().'/addon/infiniteimprobabilitydrive/infiniteimprobabilitydrive.css"/>';
$baseurl = DI::baseUrl()->get();
$baseurl = (string)DI::baseUrl();
$o .= <<< EOT

View file

@ -4,21 +4,21 @@
#
#
# Translators:
# Michal Šupler <msupler@gmail.com>, 2014
# michal_s <msupler@gmail.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-06-22 13:18+0200\n"
"PO-Revision-Date: 2014-07-07 19:12+0000\n"
"Last-Translator: Michal Šupler <msupler@gmail.com>\n"
"Language-Team: Czech (http://www.transifex.com/projects/p/friendica/language/cs/)\n"
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
"PO-Revision-Date: 2014-06-23 08:41+0000\n"
"Last-Translator: michal_s <msupler@gmail.com>, 2014\n"
"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: cs\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
#: infiniteimprobabilitydrive.php:19
#: infiniteimprobabilitydrive.php:18
msgid "Infinite Improbability Drive"
msgstr "Infinite Improbability Drive"

View file

@ -3,6 +3,6 @@
if(! function_exists("string_plural_select_cs")) {
function string_plural_select_cs($n){
$n = intval($n);
if (($n==1)) { return 0; } else if (($n>=2 && $n<=4)) { return 1; } else { return 2; }
if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; }
}}
$a->strings['Infinite Improbability Drive'] = 'Infinite Improbability Drive';

View file

@ -4,21 +4,21 @@
#
#
# Translators:
# bavatar <tobias.diekershoff@gmx.net>, 2014
# Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2014
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-06-22 13:18+0200\n"
"PO-Revision-Date: 2014-07-06 12:15+0000\n"
"Last-Translator: bavatar <tobias.diekershoff@gmx.net>\n"
"Language-Team: German (http://www.transifex.com/projects/p/friendica/language/de/)\n"
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
"PO-Revision-Date: 2014-06-23 08:41+0000\n"
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2014\n"
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: infiniteimprobabilitydrive.php:19
#: infiniteimprobabilitydrive.php:18
msgid "Infinite Improbability Drive"
msgstr "Infinite Improbability Drive"

View file

@ -9,16 +9,16 @@ msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-02-27 05:01-0500\n"
"PO-Revision-Date: 2017-09-20 06:08+0000\n"
"Last-Translator: fabrixxm <fabrix.xm@gmail.com>\n"
"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n"
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
"PO-Revision-Date: 2014-06-23 08:41+0000\n"
"Last-Translator: fabrixxm <fabrix.xm@gmail.com>, 2014\n"
"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
#: infiniteimprobabilitydrive.php:19
#: infiniteimprobabilitydrive.php:18
msgid "Infinite Improbability Drive"
msgstr "Motore ad Improbabilità Infinita"

View file

@ -3,6 +3,6 @@
if(! function_exists("string_plural_select_it")) {
function string_plural_select_it($n){
$n = intval($n);
return intval($n != 1);
if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; }
}}
$a->strings['Infinite Improbability Drive'] = 'Motore ad Improbabilità Infinita';

4
invidious/README.md Normal file
View file

@ -0,0 +1,4 @@
invidious Addon for Friendica
==========================
This addon will replace "youtube.com" with the chosen Invidious instance

103
invidious/invidious.php Normal file
View file

@ -0,0 +1,103 @@
<?php
/*
* Name: invidious
* Description: Replaces links to youtube.com to an invidious instance in all displays of postings on a node.
* Version: 0.3
* Author: Matthias Ebers <https://loma.ml/profile/feb>
* Author: Michael Vogel <https://pirati.ca/profile/heluecht>
*
*/
use Friendica\Core\Hook;
use Friendica\Core\Renderer;
use Friendica\DI;
CONST INVIDIOUS_DEFAULT = 'https://invidio.us';
function invidious_install()
{
Hook::register('prepare_body_final', __FILE__, 'invidious_render');
Hook::register('addon_settings', __FILE__, 'invidious_settings');
Hook::register('addon_settings_post', __FILE__, 'invidious_settings_post');
}
/* Handle the send data from the admin settings
*/
function invidious_addon_admin_post()
{
DI::config()->set('invidious', 'server', trim($_POST['invidiousserver'], " \n\r\t\v\x00/"));
}
/* Hook into the admin settings to let the admin choose an
* invidious server to use for the replacement.
*/
function invidious_addon_admin(string &$o)
{
$invidiousserver = DI::config()->get('invidious', 'server', INVIDIOUS_DEFAULT);
$t = Renderer::getMarkupTemplate('admin.tpl', 'addon/invidious/');
$o = Renderer::replaceMacros($t, [
'$settingdescription' => DI::l10n()->t('Which Invidious server shall be used for the replacements in the post bodies? Use the URL with servername and protocol. See %s for a list of available public Invidious servers.', 'https://redirect.invidious.io'),
'$invidiousserver' => ['invidiousserver', DI::l10n()->t('Invidious server'), $invidiousserver, DI::l10n()->t('See %s for a list of available Invidious servers.', '<a href="https://api.invidious.io/">https://api.invidious.io/</a>')],
'$submit' => DI::l10n()->t('Save Settings'),
]);
}
function invidious_settings(array &$data)
{
if (!DI::userSession()->getLocalUserId()) {
return;
}
$enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'invidious', 'enabled');
$server = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'invidious', 'server', DI::config()->get('invidious', 'server', INVIDIOUS_DEFAULT));
$t = Renderer::getMarkupTemplate('settings.tpl', 'addon/invidious/');
$html = Renderer::replaceMacros($t, [
'$enabled' => ['enabled', DI::l10n()->t('Replace Youtube links with links to an Invidious server'), $enabled, DI::l10n()->t('If enabled, Youtube links are replaced with the links to the specified Invidious server.')],
'$server' => ['server', DI::l10n()->t('Invidious server'), $server, DI::l10n()->t('See %s for a list of available Invidious servers.', '<a href="https://api.invidious.io/">https://api.invidious.io/</a>')],
]);
$data = [
'addon' => 'invidious',
'title' => DI::l10n()->t('Invidious Settings'),
'html' => $html,
];
}
function invidious_settings_post(array &$b)
{
if (!DI::userSession()->getLocalUserId() || empty($_POST['invidious-submit'])) {
return;
}
DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'invidious', 'enabled', (bool)$_POST['enabled']);
$server = trim($_POST['server'], " \n\r\t\v\x00/");
if ($server != DI::config()->get('invidious', 'server', INVIDIOUS_DEFAULT) && !empty($server)) {
DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'invidious', 'server', $server);
} else {
DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'invidious', 'server');
}
}
/*
* replace "youtube.com" with the chosen Invidious instance
*/
function invidious_render(array &$b)
{
if (!DI::userSession()->getLocalUserId() || !DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'invidious', 'enabled')) {
return;
}
$original = $b['html'];
$server = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'invidious', 'server', DI::config()->get('invidious', 'server', INVIDIOUS_DEFAULT));
$b['html'] = preg_replace("/https?:\/\/www.youtube.com\/watch\?v\=(.*?)/ism", $server . '/watch?v=$1', $b['html']);
$b['html'] = preg_replace("/https?:\/\/www.youtube.com\/embed\/(.*?)/ism", $server . '/embed/$1', $b['html']);
$b['html'] = preg_replace("/https?:\/\/www.youtube.com\/shorts\/(.*?)/ism", $server . '/shorts/$1', $b['html']);
$b['html'] = preg_replace("/https?:\/\/youtu.be\/(.*?)/ism", $server . '/watch?v=$1', $b['html']);
if ($original != $b['html']) {
$b['html'] .= '<hr><p><small>' . DI::l10n()->t('(Invidious addon enabled: YouTube links via %s)', $server) . '</small></p>';
}
}

View file

@ -0,0 +1,58 @@
# ADDON invidious
# Copyright (C)
# This file is distributed under the same license as the Friendica invidious addon package.
#
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-12-18 17:23+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: invidious.php:39
#, php-format
msgid ""
"Which Invidious server shall be used for the replacements in the post "
"bodies? Use the URL with servername and protocol. See %s for a list of "
"available public Invidious servers."
msgstr ""
#: invidious.php:40 invidious.php:57
msgid "Invidious server"
msgstr ""
#: invidious.php:40 invidious.php:57
#, php-format
msgid "See %s for a list of available Invidious servers."
msgstr ""
#: invidious.php:41
msgid "Save Settings"
msgstr ""
#: invidious.php:56
msgid "Replace Youtube links with links to an Invidious server"
msgstr ""
#: invidious.php:56
msgid ""
"If enabled, Youtube links are replaced with the links to the specified "
"Invidious server."
msgstr ""
#: invidious.php:62
msgid "Invidious Settings"
msgstr ""
#: invidious.php:101
#, php-format
msgid "(Invidious addon enabled: YouTube links via %s)"
msgstr ""

View file

@ -0,0 +1,5 @@
<p>{{$settingdescription}}</p>
{{include file="field_input.tpl" field=$invidiousserver}}
<div class="submit"><input type="submit" name="page_site" value="{{$submit}}" /></div>

View file

@ -0,0 +1,2 @@
{{include file="field_checkbox.tpl" field=$enabled}}
{{include file="field_input.tpl" field=$server}}

View file

@ -73,7 +73,7 @@ function irc_module() {}
function irc_content()
{
$baseurl = DI::baseUrl()->get() . '/addon/irc';
$baseurl = DI::baseUrl() . '/addon/irc';
$o = '';
/* set the list of popular channels */
@ -95,7 +95,7 @@ function irc_content()
DI::page()['aside'] .= '<div class="widget"><h3>' . DI::l10n()->t('Popular Channels') . '</h3><ul>';
foreach ($chats as $chat) {
DI::page()['aside'] .= '<li><a href="' . DI::baseUrl()->get() . '/irc?channels=' . $chat . '" >' . '#' . $chat . '</a></li>';
DI::page()['aside'] .= '<li><a href="' . DI::baseUrl() . '/irc?channels=' . $chat . '" >' . '#' . $chat . '</a></li>';
}
DI::page()['aside'] .= '</ul></div>';

View file

@ -11,59 +11,55 @@ msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-07-08 13:17+0200\n"
"PO-Revision-Date: 2018-06-14 14:36+0000\n"
"Last-Translator: Aditoo\n"
"Language-Team: Czech (http://www.transifex.com/Friendica/friendica/language/cs/)\n"
"POT-Creation-Date: 2021-11-21 19:14-0500\n"
"PO-Revision-Date: 2014-06-23 08:41+0000\n"
"Last-Translator: Aditoo, 2018\n"
"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: cs\n"
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
#: irc.php:37
msgid "IRC Settings"
msgstr "Nastavení IRC"
#: irc.php:38
#: irc.php:32
msgid ""
"Here you can change the system wide settings for the channels to "
"automatically join and access via the side bar. Note the changes you do "
"here, only effect the channel selection if you are logged in."
msgstr ""
msgstr "Zde můžete změnit systémová nastavení pro kanály pro automatické spojení a přístup přes postranní lištu. Mějte na paměti, že změny, které zde provedete, ovlivní výběr kanálů pouze, pokud jste přihlášen/a."
#: irc.php:39 irc.php:136
msgid "Save Settings"
msgstr "Uložit nastavení"
#: irc.php:40 irc.php:137
#: irc.php:33 irc.php:133
msgid "Channel(s) to auto connect (comma separated)"
msgstr "Kanál(y) pro automatické připojení (oddělené čárkami)"
#: irc.php:40 irc.php:137
#: irc.php:33 irc.php:133
msgid ""
"List of channels that shall automatically connected to when the app is "
"launched."
msgstr "Seznam kanálů, které budou při spuštění aplikace automaticky připojeny."
#: irc.php:41 irc.php:138
#: irc.php:34 irc.php:134
msgid "Popular Channels (comma separated)"
msgstr "Populární kanály (oddělené čárkami)"
#: irc.php:41 irc.php:138
#: irc.php:34 irc.php:134
msgid ""
"List of popular channels, will be displayed at the side and hotlinked for "
"easy joining."
msgstr "Seznam populárních kanálů, bude zobrazen na straně a bude obsahovat odkazy pro snadné připojení."
#: irc.php:57 irc.php:128
msgid "IRC settings saved."
msgstr "IRC Nastavení uloženo."
#: irc.php:39
msgid "IRC Settings"
msgstr "Nastavení IRC"
#: irc.php:62
#: irc.php:60
msgid "IRC Chatroom"
msgstr "IRC Místnost"
#: irc.php:90
#: irc.php:88
msgid "Popular Channels"
msgstr "Populární kanály"
#: irc.php:132
msgid "Save Settings"
msgstr "Uložit nastavení"

View file

@ -5,12 +5,12 @@ function string_plural_select_cs($n){
$n = intval($n);
if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; }
}}
$a->strings['IRC Settings'] = 'Nastavení IRC';
$a->strings['Save Settings'] = 'Uložit nastavení';
$a->strings['Here you can change the system wide settings for the channels to automatically join and access via the side bar. Note the changes you do here, only effect the channel selection if you are logged in.'] = 'Zde můžete změnit systémová nastavení pro kanály pro automatické spojení a přístup přes postranní lištu. Mějte na paměti, že změny, které zde provedete, ovlivní výběr kanálů pouze, pokud jste přihlášen/a.';
$a->strings['Channel(s) to auto connect (comma separated)'] = 'Kanál(y) pro automatické připojení (oddělené čárkami)';
$a->strings['List of channels that shall automatically connected to when the app is launched.'] = 'Seznam kanálů, které budou při spuštění aplikace automaticky připojeny.';
$a->strings['Popular Channels (comma separated)'] = 'Populární kanály (oddělené čárkami)';
$a->strings['List of popular channels, will be displayed at the side and hotlinked for easy joining.'] = 'Seznam populárních kanálů, bude zobrazen na straně a bude obsahovat odkazy pro snadné připojení.';
$a->strings['IRC settings saved.'] = 'IRC Nastavení uloženo.';
$a->strings['IRC Settings'] = 'Nastavení IRC';
$a->strings['IRC Chatroom'] = 'IRC Místnost';
$a->strings['Popular Channels'] = 'Populární kanály';
$a->strings['Save Settings'] = 'Uložit nastavení';

View file

@ -12,9 +12,9 @@ msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-11-21 19:14-0500\n"
"PO-Revision-Date: 2021-02-01 18:19+0000\n"
"Last-Translator: Transifex Bot <>\n"
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
"PO-Revision-Date: 2014-06-23 08:41+0000\n"
"Last-Translator: Ulf Rompe <transifex.com@rompe.org>, 2019\n"
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -10,59 +10,55 @@ msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-07-08 13:17+0200\n"
"PO-Revision-Date: 2020-09-17 11:40+0000\n"
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>\n"
"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n"
"POT-Creation-Date: 2021-11-21 19:14-0500\n"
"PO-Revision-Date: 2014-06-23 08:41+0000\n"
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>, 2020\n"
"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
#: irc.php:37
msgid "IRC Settings"
msgstr "Impostazioni IRC"
#: irc.php:38
#: irc.php:32
msgid ""
"Here you can change the system wide settings for the channels to "
"automatically join and access via the side bar. Note the changes you do "
"here, only effect the channel selection if you are logged in."
msgstr "Qui puoi modificare le impostazioni globali di sistema per i canali a cui accedere automaticamente attraverso la barra laterale. Nota che le modifiche che effetti qui hanno effetto sulla selezione di canali solo se sei loggato."
#: irc.php:39 irc.php:136
msgid "Save Settings"
msgstr "Salva Impostazioni"
#: irc.php:40 irc.php:137
#: irc.php:33 irc.php:133
msgid "Channel(s) to auto connect (comma separated)"
msgstr "Canale(i) a cui autocollegarsi (separati da virgola)"
#: irc.php:40 irc.php:137
#: irc.php:33 irc.php:133
msgid ""
"List of channels that shall automatically connected to when the app is "
"launched."
msgstr "Lista di canali che a cui connettersi automaticamente quando l'app è avviata."
#: irc.php:41 irc.php:138
#: irc.php:34 irc.php:134
msgid "Popular Channels (comma separated)"
msgstr "Canali popolari (separati da virgola)"
#: irc.php:41 irc.php:138
#: irc.php:34 irc.php:134
msgid ""
"List of popular channels, will be displayed at the side and hotlinked for "
"easy joining."
msgstr "Lista di canali popolari: sarà visualizzata a lato e provvista di collegamento per facilitare l'adesione."
#: irc.php:57 irc.php:128
msgid "IRC settings saved."
msgstr "Impostazioni IRC salvate."
#: irc.php:39
msgid "IRC Settings"
msgstr "Impostazioni IRC"
#: irc.php:62
#: irc.php:60
msgid "IRC Chatroom"
msgstr "Stanza IRC"
#: irc.php:90
#: irc.php:88
msgid "Popular Channels"
msgstr "Canali Popolari"
#: irc.php:132
msgid "Save Settings"
msgstr "Salva Impostazioni"

View file

@ -3,15 +3,14 @@
if(! function_exists("string_plural_select_it")) {
function string_plural_select_it($n){
$n = intval($n);
return intval($n != 1);
if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; }
}}
$a->strings['IRC Settings'] = 'Impostazioni IRC';
$a->strings['Here you can change the system wide settings for the channels to automatically join and access via the side bar. Note the changes you do here, only effect the channel selection if you are logged in.'] = 'Qui puoi modificare le impostazioni globali di sistema per i canali a cui accedere automaticamente attraverso la barra laterale. Nota che le modifiche che effetti qui hanno effetto sulla selezione di canali solo se sei loggato.';
$a->strings['Save Settings'] = 'Salva Impostazioni';
$a->strings['Channel(s) to auto connect (comma separated)'] = 'Canale(i) a cui autocollegarsi (separati da virgola)';
$a->strings['List of channels that shall automatically connected to when the app is launched.'] = 'Lista di canali che a cui connettersi automaticamente quando l\'app è avviata.';
$a->strings['Popular Channels (comma separated)'] = 'Canali popolari (separati da virgola)';
$a->strings['List of popular channels, will be displayed at the side and hotlinked for easy joining.'] = 'Lista di canali popolari: sarà visualizzata a lato e provvista di collegamento per facilitare l\'adesione.';
$a->strings['IRC settings saved.'] = 'Impostazioni IRC salvate.';
$a->strings['IRC Settings'] = 'Impostazioni IRC';
$a->strings['IRC Chatroom'] = 'Stanza IRC';
$a->strings['Popular Channels'] = 'Canali Popolari';
$a->strings['Save Settings'] = 'Salva Impostazioni';

View file

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-03-23 23:53-0400\n"
"POT-Creation-Date: 2023-06-03 15:49-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -17,40 +17,40 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: js_upload.php:34
#: js_upload.php:37
msgid "Select files for upload"
msgstr ""
#: js_upload.php:35
#: js_upload.php:38
msgid "Drop files here to upload"
msgstr ""
#: js_upload.php:36
#: js_upload.php:39
msgid "Cancel"
msgstr ""
#: js_upload.php:37
#: js_upload.php:40
msgid "Failed"
msgstr ""
#: js_upload.php:215
#: js_upload.php:209
msgid "No files were uploaded."
msgstr ""
#: js_upload.php:221
#: js_upload.php:215
msgid "Uploaded file is empty"
msgstr ""
#: js_upload.php:233
#: js_upload.php:227
#, php-format
msgid "Image exceeds size limit of %s"
msgstr ""
#: js_upload.php:245
#: js_upload.php:239
#, php-format
msgid "File has an invalid extension, it should be one of %s."
msgstr ""
#: js_upload.php:256
#: js_upload.php:250
msgid "Upload was cancelled, or server error encountered"
msgstr ""

View file

@ -4,53 +4,56 @@
#
#
# Translators:
# Michal Šupler <msupler@gmail.com>, 2014
# Aditoo, 2018
# michal_s <msupler@gmail.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-02-27 05:01-0500\n"
"PO-Revision-Date: 2014-07-07 19:13+0000\n"
"Last-Translator: Michal Šupler <msupler@gmail.com>\n"
"Language-Team: Czech (http://www.transifex.com/projects/p/friendica/language/cs/)\n"
"POT-Creation-Date: 2021-03-23 23:53-0400\n"
"PO-Revision-Date: 2014-06-23 08:46+0000\n"
"Last-Translator: Aditoo, 2018\n"
"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: cs\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
#: js_upload.php:43
msgid "Upload a file"
msgstr "Nahrát soubor"
#: js_upload.php:34
msgid "Select files for upload"
msgstr ""
#: js_upload.php:44
#: js_upload.php:35
msgid "Drop files here to upload"
msgstr "Přeneste sem soubory k nahrání"
msgstr "Přetáhněte sem soubory k nahrání"
#: js_upload.php:45
#: js_upload.php:36
msgid "Cancel"
msgstr "Zrušit"
#: js_upload.php:46
#: js_upload.php:37
msgid "Failed"
msgstr "Neúspěch"
#: js_upload.php:303
#: js_upload.php:215
msgid "No files were uploaded."
msgstr "Žádné soubory nebyly nahrány."
#: js_upload.php:309
#: js_upload.php:221
msgid "Uploaded file is empty"
msgstr "Nahraný soubor je prázdný"
#: js_upload.php:321
msgid "Image exceeds size limit of "
msgstr "Velikost obrázku překračuje limit velikosti"
#: js_upload.php:233
#, php-format
msgid "Image exceeds size limit of %s"
msgstr ""
#: js_upload.php:332
msgid "File has an invalid extension, it should be one of "
msgstr "Soubor má neplatnou příponu, ta by měla být jednou z"
#: js_upload.php:245
#, php-format
msgid "File has an invalid extension, it should be one of %s."
msgstr ""
#: js_upload.php:343
#: js_upload.php:256
msgid "Upload was cancelled, or server error encountered"
msgstr "Nahrávání bylo zrušeno nebo došlo k chybě na serveru"

View file

@ -3,14 +3,11 @@
if(! function_exists("string_plural_select_cs")) {
function string_plural_select_cs($n){
$n = intval($n);
if (($n==1)) { return 0; } else if (($n>=2 && $n<=4)) { return 1; } else { return 2; }
if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; }
}}
$a->strings['Upload a file'] = 'Nahrát soubor';
$a->strings['Drop files here to upload'] = 'Přeneste sem soubory k nahrání';
$a->strings['Drop files here to upload'] = 'Přetáhněte sem soubory k nahrání';
$a->strings['Cancel'] = 'Zrušit';
$a->strings['Failed'] = 'Neúspěch';
$a->strings['No files were uploaded.'] = 'Žádné soubory nebyly nahrány.';
$a->strings['Uploaded file is empty'] = 'Nahraný soubor je prázdný';
$a->strings['Image exceeds size limit of '] = 'Velikost obrázku překračuje limit velikosti';
$a->strings['File has an invalid extension, it should be one of '] = 'Soubor má neplatnou příponu, ta by měla být jednou z';
$a->strings['Upload was cancelled, or server error encountered'] = 'Nahrávání bylo zrušeno nebo došlo k chybě na serveru';

View file

@ -12,9 +12,9 @@ msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-03-23 23:53-0400\n"
"PO-Revision-Date: 2021-12-05 08:34+0000\n"
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>\n"
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
"PO-Revision-Date: 2014-06-23 08:46+0000\n"
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2021\n"
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -5,52 +5,55 @@
#
# Translators:
# Albert, 2016
# Senex Petrovic <javierruizo@hotmail.com>, 2021
msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-02-27 05:01-0500\n"
"PO-Revision-Date: 2016-11-17 18:59+0000\n"
"Last-Translator: Albert\n"
"Language-Team: Spanish (http://www.transifex.com/Friendica/friendica/language/es/)\n"
"POT-Creation-Date: 2021-03-23 23:53-0400\n"
"PO-Revision-Date: 2014-06-23 08:46+0000\n"
"Last-Translator: Senex Petrovic <javierruizo@hotmail.com>, 2021\n"
"Language-Team: Spanish (http://app.transifex.com/Friendica/friendica/language/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
#: js_upload.php:43
msgid "Upload a file"
msgstr "Subir un archivo"
#: js_upload.php:34
msgid "Select files for upload"
msgstr "Seleciona archivos a subir"
#: js_upload.php:44
#: js_upload.php:35
msgid "Drop files here to upload"
msgstr "Soltar archivos aquí para subir"
#: js_upload.php:45
#: js_upload.php:36
msgid "Cancel"
msgstr "Cancelar"
#: js_upload.php:46
#: js_upload.php:37
msgid "Failed"
msgstr "Fallido"
#: js_upload.php:303
#: js_upload.php:215
msgid "No files were uploaded."
msgstr "No se subió ningún archivo."
#: js_upload.php:309
#: js_upload.php:221
msgid "Uploaded file is empty"
msgstr "El archivo subido está vacío"
#: js_upload.php:321
msgid "Image exceeds size limit of "
msgstr "La imagen excede el tamaño de"
#: js_upload.php:233
#, php-format
msgid "Image exceeds size limit of %s"
msgstr ""
#: js_upload.php:332
msgid "File has an invalid extension, it should be one of "
msgstr "El archivo tiene una extensión inválida, debería ser una de"
#: js_upload.php:245
#, php-format
msgid "File has an invalid extension, it should be one of %s."
msgstr ""
#: js_upload.php:343
#: js_upload.php:256
msgid "Upload was cancelled, or server error encountered"
msgstr "La subida fue cancelada, o el servidor tuvo un error"

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