1
0
mirror of https://framagit.org/tom79/fedilab-tube synced 2025-06-05 21:09:11 +02:00

219 Commits
1.2.0 ... 1.7.0

Author SHA1 Message Date
3ed5248c2a Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/fedilab-tube!46
2020-11-15 11:49:35 +01:00
32990932ad New Crowdin updates 2020-11-15 11:49:34 +01:00
6d0a47903c Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/fedilab-tube!45
2020-11-15 11:40:01 +01:00
05eaa196b4 Prepare release 1.7.0 2020-11-15 11:34:18 +01:00
2cd076bfb8 Comment issue #46 - Allow to delete history 2020-11-15 11:27:38 +01:00
02cd267cae Fix issue #68 - Videos in unlisted playlists cannot be displayed 2020-11-15 09:54:55 +01:00
21394cb585 New translations strings.xml (Polish) 2020-11-15 03:16:43 +01:00
73cd48b94a Release 1.7.0 2020-11-14 19:13:59 +01:00
ea2cf58e5f Merge remote-tracking branch 'origin/develop' into develop 2020-11-14 17:52:32 +01:00
2f3e29b037 Improve comments 2020-11-14 17:52:17 +01:00
33d597c2c0 Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/fedilab-tube!44
2020-11-14 17:49:49 +01:00
66afb3f4ee New Crowdin updates 2020-11-14 17:49:48 +01:00
dad94d753d Remove lib 2020-11-14 17:19:37 +01:00
1727bebf58 update release notes 2020-11-14 15:26:36 +01:00
37576c69ce fixes 2020-11-14 15:22:48 +01:00
b8f83a7227 Merge branch 'bug_fixes_1-6-0' into develop
# Conflicts:
#	app/src/main/java/app/fedilab/fedilabtube/PeertubeActivity.java
2020-11-14 15:21:58 +01:00
3a14abaf2e fixes 2020-11-14 15:18:16 +01:00
0e03a55aef Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/fedilab-tube!43
2020-11-14 15:10:47 +01:00
931fb30330 New Crowdin updates 2020-11-14 15:10:47 +01:00
b893dc9c4f Merge remote-tracking branch 'origin/develop' into develop 2020-11-14 15:10:27 +01:00
f6ddd99449 Last fixes 2020-11-14 15:09:52 +01:00
ddcbbfe670 Last fixes 2020-11-14 15:05:44 +01:00
0f7438fa54 Some fixes 2020-11-14 12:19:37 +01:00
fbbab1db68 Some fixes 2020-11-14 09:50:48 +01:00
15725dceb0 Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/fedilab-tube!42
2020-11-13 18:46:58 +01:00
1bcbcec8b8 New Crowdin updates 2020-11-13 18:46:57 +01:00
c3e475be6f Allow to export/import 2020-11-13 18:45:55 +01:00
150a81adc6 Some fixes 2020-11-12 17:08:43 +01:00
a984607ee8 Update release notes 2020-11-11 18:28:50 +01:00
2bf929986e Change button 2020-11-11 15:47:42 +01:00
860edec2e6 Follow remote accounts 2020-11-11 15:36:15 +01:00
90cfcbb7ae Fix issue #67 - Reaching profile edition from the account activity 2020-11-11 11:36:01 +01:00
c63048730f Fix issue #62 - Errors with pull to refresh 2020-11-11 11:13:29 +01:00
55bbafdbb5 Fix issue #63 - Reach owner from channels 2020-11-11 10:42:40 +01:00
0923a07e42 Fix issue #59 - Follow button from sepia search 2020-11-11 10:37:49 +01:00
431c21e066 Last fixes 2020-11-11 10:34:28 +01:00
17c84f6c37 Switch from accounts 2020-11-10 18:44:48 +01:00
58f10d9372 Add the logic 2020-11-09 18:48:10 +01:00
dfdda7627f Release 1.6.0 2020-11-08 17:48:13 +01:00
1711826c43 Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/fedilab-tube!41
2020-11-08 17:42:24 +01:00
4627de23b4 New Crowdin updates 2020-11-08 17:42:24 +01:00
023ab2d4b2 Release 1.6.0 2020-11-08 17:42:01 +01:00
2a375318ea fix issue link 2020-11-08 16:50:20 +01:00
fee593d059 Fix issue #44 - Sync NSFW + add them in settings to apply them. 2020-11-08 16:45:38 +01:00
fe3546e282 Fix issue #57 - Allow to share channel and account links 2020-11-08 10:43:27 +01:00
b61b6868a6 Fix issue #55 - Honor downloads disabled 2020-11-08 10:27:40 +01:00
2f8ecd1f3e Prepare release 2020-11-07 17:23:53 +01:00
8a9ead3f0d Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/fedilab-tube!40
2020-11-07 15:55:16 +01:00
43e2762d4d New Crowdin updates 2020-11-07 15:55:16 +01:00
8ab237a957 Fix issue #47 - Seek to last known position 2020-11-07 15:51:38 +01:00
ffa5d0883a Update release notes 2020-11-07 10:42:19 +01:00
14f0a47f52 Fix issue #40 - Allow search to resolve peertube links 2020-11-07 10:38:30 +01:00
4c1e466866 Fix issue #42 - Allow to display channels from playing video activity 2020-11-07 10:24:56 +01:00
24c6f79b51 small fix 2020-11-07 10:17:45 +01:00
8c958a2563 Fix issue #31 - Show more content when available (with a toggle button) 2020-11-07 10:09:58 +01:00
02cc00780d Merge remote-tracking branch 'origin/develop' into develop 2020-11-07 09:43:14 +01:00
d13cce3997 Fix issue #39 - Allow to display videos in smaller lists 2020-11-07 09:42:56 +01:00
985835429b Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/fedilab-tube!39
2020-11-06 19:10:28 +01:00
00751cedab New Crowdin updates 2020-11-06 19:10:28 +01:00
c4e85a7161 Some improvements 2020-11-06 19:09:37 +01:00
253b61fb11 Fix issue #29 - Accept URL for instances 2020-11-06 18:52:29 +01:00
54ffbe2e15 Fix issue #30 2020-11-06 18:40:55 +01:00
86d9ba930c Useless translations 2020-11-06 18:22:56 +01:00
fb96efc8cf Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/fedilab-tube!38
2020-11-06 18:01:22 +01:00
aaac1652e9 New Crowdin updates 2020-11-06 18:01:21 +01:00
c8fc98ee71 Add torrent 2020-11-06 17:32:12 +01:00
4457259dfd Update README.md 2020-11-05 18:03:21 +01:00
6dbb11f6e9 Fix notification settings 2020-11-05 17:56:26 +01:00
08a4b4b49a Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/fedilab-tube!37
2020-11-05 17:53:29 +01:00
4afd2ca341 New Crowdin updates 2020-11-05 17:53:29 +01:00
0c048877e0 Some new features 2020-11-05 17:38:57 +01:00
825a74de4a Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/fedilab-tube!36
2020-11-04 18:55:41 +01:00
79ca0ceb88 New Crowdin updates 2020-11-04 18:55:41 +01:00
a5ccc9bf6f Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/fedilab-tube!35
2020-11-04 18:40:32 +01:00
685467266a New Crowdin updates 2020-11-04 18:40:31 +01:00
599e53b10c Merge remote-tracking branch 'origin/develop' into develop 2020-11-04 18:40:21 +01:00
029b8b57ae push notifications 2020-11-04 18:39:45 +01:00
631264eb57 push notifications 2020-11-04 17:43:38 +01:00
e7eef5b760 Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/fedilab-tube!34
2020-11-03 07:32:14 +01:00
59741e5979 New Crowdin updates 2020-11-03 07:32:14 +01:00
0f38ad180a Allow to edit profile + profile picture 2020-11-01 18:34:53 +01:00
fdc6e6e325 Allow to edit profile 2020-10-31 18:24:52 +01:00
ed9e79496a Auto play video when ended 2020-10-31 10:37:17 +01:00
4f909417f1 Fix issue #14 2020-10-30 16:21:56 +01:00
aecb4034ad Fix issue #20 2020-10-30 14:45:37 +01:00
f0335d96d2 Fix issue #18 2020-10-29 18:56:57 +01:00
65f3886355 upgrade lib 2020-10-29 10:05:40 +01:00
8e2f1fb8fe Merge remote-tracking branch 'origin/develop' into develop 2020-10-28 15:03:15 +01:00
852cfee310 Fix double click for pausing and exit fullscreen 2020-10-28 15:03:07 +01:00
6620a12957 Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/fedilab-tube!33
2020-10-28 08:25:38 +01:00
11e8135cbd New translations strings.xml (German) 2020-10-27 11:45:01 +01:00
824c4e0cbb Comment #16 - Redirect to another app if the URL can't be open with TubeLab 2020-10-26 19:02:55 +01:00
9af7934448 Fix issue #16 2020-10-26 14:38:51 +01:00
4ffa027e8d Merge remote-tracking branch 'origin/develop' into develop 2020-10-25 17:40:27 +01:00
7e8ab3359a Add CHANGELOG + CONTRIBUTING.md + issue_template.md + FUNDING.yml 2020-10-25 17:40:09 +01:00
8e72655731 Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/fedilab-tube!32
2020-10-25 09:40:17 +01:00
5c098857bd New Crowdin updates 2020-10-25 09:40:17 +01:00
7fece740af Merge remote-tracking branch 'origin/develop' into develop 2020-10-24 16:36:54 +02:00
857ab65f93 Some improvements 2020-10-24 16:36:49 +02:00
807655da5b Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/fedilab-tube!31
2020-10-24 15:57:05 +02:00
a77f37e564 New Crowdin updates 2020-10-24 15:57:04 +02:00
1194209c82 Fix #13 - #14 - #15 Settings for auto fullscreen/ disable auto playblack / pause videos in fullscreen with key back 2020-10-24 14:42:51 +02:00
f31b6e9ac8 Fix mini video view not supported on some devices 2020-10-23 15:33:35 +02:00
3353b7205b Fix issue #10 2020-10-22 08:57:51 +02:00
0f995cc615 Fix issue #11 2020-10-21 18:43:56 +02:00
7be0f72292 Release 1.5.1 2020-10-17 18:53:13 +02:00
ffbe8877a8 Merge branch 'develop' of https://framagit.org/tom79/fedilab-tube into develop 2020-10-17 18:50:26 +02:00
74feb7e8f0 Release 1.5.1 2020-10-17 18:50:20 +02:00
cbaef4bcfe Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/fedilab-tube!30
2020-10-17 18:08:38 +02:00
38a387a423 New Crowdin updates 2020-10-17 18:08:38 +02:00
1092eefc76 Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/fedilab-tube!29
2020-10-17 16:47:12 +02:00
3615b43b97 New Crowdin updates 2020-10-17 16:47:11 +02:00
e17c7fb01d Fix some crashes 2020-10-17 10:55:25 +02:00
f3d69e19a0 Merge branch 'develop' of https://framagit.org/tom79/fedilab-tube into develop 2020-10-17 10:53:11 +02:00
ea102eb485 Fix some crashes 2020-10-17 10:52:56 +02:00
2e4c01ed62 Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/fedilab-tube!28
2020-10-17 05:55:39 +02:00
ed22892d10 New Crowdin updates 2020-10-17 05:55:39 +02:00
017bd5a6a2 Release 1.5.0 2020-10-16 18:03:41 +02:00
967f11ddb4 Release 1.5.0 2020-10-16 17:53:30 +02:00
6b4abd019e typo 2020-10-16 17:43:18 +02:00
8b66c4030f Some fixes 2020-10-16 17:41:07 +02:00
34f058358e Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/fedilab-tube!27
2020-10-16 17:26:37 +02:00
2bab907777 New Crowdin updates 2020-10-16 17:26:37 +02:00
52e64b6d85 Fix issue #9 2020-10-16 17:25:52 +02:00
9510678a9f Manage accounts 2020-10-16 17:03:07 +02:00
b4e7c3f8e2 New fixes 2020-10-16 11:37:40 +02:00
d800d2b10c Fix comment layout 2020-10-15 19:07:58 +02:00
785b4949e6 Fix a register issue 2020-10-15 19:02:12 +02:00
b79e17cb60 Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/fedilab-tube!26
2020-10-15 18:59:22 +02:00
19fcbeb4b9 New Crowdin updates 2020-10-15 18:59:22 +02:00
ffb355d1a2 Add notifications for abuse reports 2020-10-15 18:59:08 +02:00
43fd2945cc Some improvements 2020-10-15 18:37:50 +02:00
d93c74a449 Reply to comments 2020-10-15 18:11:37 +02:00
7a197993c9 Support Emoji and replies 2020-10-15 15:16:41 +02:00
dc2a252dd5 Prepare the new layout. 2020-10-14 19:14:54 +02:00
2c33f7a7f8 Prepare the new layout. 2020-10-14 19:11:53 +02:00
24a8a0dc00 Some improvements 2020-10-14 16:39:27 +02:00
b78894b33c Merge remote-tracking branch 'origin/develop' into develop 2020-10-14 16:06:24 +02:00
2d33d7f970 Fix comment issue when posting 2020-10-14 16:06:17 +02:00
8823eb74ba Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/fedilab-tube!25
2020-10-14 15:24:32 +02:00
7f77b86272 New Crowdin updates 2020-10-14 15:24:32 +02:00
2f773b2f0f Custom instances per country 2020-10-14 10:57:28 +02:00
ca69a6e86d Code cleaning 2020-10-14 10:31:02 +02:00
3e5cefbf24 Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/fedilab-tube!24
2020-10-13 18:12:03 +02:00
245ef64ebe New Crowdin updates 2020-10-13 18:12:03 +02:00
a0ff454dd9 Some improvements 2020-10-13 18:11:53 +02:00
fa6b1560f8 Prepare release 1.4.2 2020-10-13 17:57:35 +02:00
518b5f617b Merge remote-tracking branch 'origin/develop' into develop 2020-10-13 17:50:57 +02:00
7c4ce7701c some fixes 2020-10-13 17:50:52 +02:00
0b6557f9c5 Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/fedilab-tube!23
2020-10-13 16:36:10 +02:00
a8e00d137a New Crowdin updates 2020-10-13 16:36:10 +02:00
75d3f74e48 Merge remote-tracking branch 'origin/develop' into develop 2020-10-13 16:35:56 +02:00
3866317597 some fixes 2020-10-13 16:35:51 +02:00
10e904fe4a Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/fedilab-tube!22
2020-10-13 14:32:42 +02:00
be655f6c2b New Crowdin updates 2020-10-13 14:32:42 +02:00
676e540059 Dark/Light/Automatic theme 2020-10-13 14:30:08 +02:00
87763a050c Merge remote-tracking branch 'origin/develop' into develop 2020-10-13 11:06:58 +02:00
ab45c1f80c Fix some issues + check if video is federated for Sepia search 2020-10-13 11:04:35 +02:00
ec5f2c7c45 Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/fedilab-tube!21
2020-10-12 07:35:45 +02:00
c4448f22b9 New Crowdin updates 2020-10-12 07:35:44 +02:00
62af5c54aa Release 1.4.1 2020-10-11 17:21:45 +02:00
5872f5c99f Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/fedilab-tube!20
2020-10-11 17:18:41 +02:00
2b1a63e08b New Crowdin updates 2020-10-11 17:18:41 +02:00
7b96cf32b3 App rater for Google Full version 2020-10-10 15:40:16 +02:00
6108bd143c App rater for Google Full version 2020-10-10 15:33:25 +02:00
0127b9bffa Censor videos having youtube + download in their title (Google Play release only). 2020-10-10 15:21:46 +02:00
8dddfc5497 Last fixes 2020-10-10 15:05:39 +02:00
bf119a5808 Fix strings 2020-10-10 11:52:57 +02:00
89ade69c5f Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/fedilab-tube!19
2020-10-10 11:49:50 +02:00
93eaec8544 Fix some elements 2020-10-10 11:49:18 +02:00
ce984de339 New translations strings.xml (French) 2020-10-10 10:32:08 +02:00
b089ae93e1 Refresh subscription 2020-10-10 10:28:45 +02:00
fc95708a84 Merge remote-tracking branch 'origin/develop' into develop 2020-10-10 09:43:40 +02:00
7262690999 Fix translations 2020-10-10 09:43:35 +02:00
f818c74943 Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/fedilab-tube!18
2020-10-10 09:38:05 +02:00
d7c5a04965 New Crowdin updates 2020-10-10 09:38:05 +02:00
257a00fa1e Some fixes 2020-10-10 09:37:44 +02:00
23875a2ceb Fix channel filter for subscriptions 2020-10-10 09:25:00 +02:00
3f1883fbbc Fix an issue with overlapping views 2020-10-09 19:14:20 +02:00
c5269a3129 comment #5 - Some improvements 2020-10-09 18:37:54 +02:00
056092ac71 comment #5 - Add searches 2020-10-09 18:22:05 +02:00
fd7632f001 comment #5 - searches 2020-10-09 14:54:01 +02:00
fb83a1927d comment #5 - prepare layouts 2020-10-09 10:19:46 +02:00
641a616c96 Change readme + fix titles 2020-10-08 18:46:18 +02:00
fc051d8d1d Merge branch 'develop' of https://framagit.org/tom79/fedilab-tube into develop 2020-10-08 18:44:30 +02:00
b8bec4f357 Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/fedilab-tube!17
2020-10-08 18:44:22 +02:00
fe78c8bf7e New Crowdin updates 2020-10-08 18:44:21 +02:00
42caaa9dc9 Fix titles 2020-10-08 18:35:35 +02:00
74d6cb8041 Prepare release 1.3.0 2020-10-08 18:30:47 +02:00
7678da2bb6 Change description + fix pagination 2020-10-08 18:13:04 +02:00
e771153f35 Some changes 2020-10-08 17:16:42 +02:00
e96b9f7f02 Some fixes 2020-10-08 16:21:14 +02:00
0604ac9ba8 Merge remote-tracking branch 'origin/develop' into develop 2020-10-07 17:46:25 +02:00
bd0c59a69e Improve menu for videos 2020-10-07 17:46:15 +02:00
0a84b75518 typo error 2020-10-07 09:25:58 +02:00
c4b49b58cf typo error 2020-10-07 09:25:41 +02:00
afbb27896e Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/fedilab-tube!16
2020-10-07 08:53:17 +02:00
e0ff6c0ac3 New Crowdin updates 2020-10-07 08:53:17 +02:00
4d7c7e88bb typo error 2020-10-06 19:02:25 +02:00
7eef023277 some fixes 2020-10-06 18:49:15 +02:00
6a762a8fd6 some fixes 2020-10-06 17:11:25 +02:00
752e3d50c1 some fixes 2020-10-06 16:05:34 +02:00
8377f9bb8a Merge branch 'develop' into new_feature
# Conflicts:
#	app/src/main/java/app/fedilab/fedilabtube/drawer/PeertubeAdapter.java
#	app/src/main/java/app/fedilab/fedilabtube/helper/Helper.java
2020-10-06 15:32:04 +02:00
5ff06a29d2 Merge branch 'develop' of https://framagit.org/tom79/fedilab-tube into develop
 Conflicts:
	app/build.gradle
2020-10-06 15:30:53 +02:00
50aeb075b1 test 2020-10-06 15:30:15 +02:00
79ff617d67 Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/fedilab-tube!15
2020-10-06 14:09:02 +02:00
5de8524f2a New Crowdin updates 2020-10-06 14:09:02 +02:00
6164ff9163 change versionCode 2020-10-05 14:43:18 +02:00
6e8b304b63 Fix crashes 2020-10-05 14:34:22 +02:00
3be0cd727f Fix crashes 2020-10-05 14:34:01 +02:00
451dd53230 Merge remote-tracking branch 'origin/develop' into develop 2020-10-04 17:51:15 +02:00
34c1222fbc Code clean 2020-10-04 17:51:09 +02:00
ccf2fc877b Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/fedilab-tube!14
2020-10-04 17:26:04 +02:00
10a496c299 New Crowdin updates 2020-10-04 17:26:04 +02:00
ba1bfd1f9c Change loader 2020-10-04 17:25:08 +02:00
b9622da6c6 Merge remote-tracking branch 'origin/develop' into develop 2020-10-04 14:01:11 +02:00
b3e9100c2f Fix inverted strings 2020-10-04 13:53:07 +02:00
fb0e87397d Merge branch 'l10n_develop' into 'develop'
New Crowdin updates

See merge request tom79/fedilab-tube!13
2020-10-04 13:51:25 +02:00
bed1bb634b New Crowdin updates 2020-10-04 13:51:25 +02:00
247 changed files with 17157 additions and 6751 deletions

10
.github/FUNDING.yml vendored Normal file
View File

@ -0,0 +1,10 @@
# These are supported funding model platforms
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: tom79
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: tom79
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']

28
CHANGELOG Normal file
View File

@ -0,0 +1,28 @@
# 1.5.2
### Added:
- Enable/disable auto playback
- Enter in full-screen automatically (default disabled)
- Back press pauses the video in full-screen
### Fixed:
- Public timelines don't honor muted accounts
- Comments are not removed when switching to a video without comments
- Some other fixes
--------
# 1.5.1
- Fix some issues
- New translations
--------
# 1.5.0
- Custom default instance depending of the country
- Full managements of comments and their replies (read/post/delete)
- Profile for accounts (displays their channels & videos)
- Fix some issues when posting a comment
- Fix videos not paused after screen lock

17
CONTRIBUTING.md Normal file
View File

@ -0,0 +1,17 @@
CONTRIBUTING
============
### Localizations:
TubeLab works only with [Crowdin](https://crowdin.com/project/tubelab), which offers nice tools for helping in translations.
New translations will be automatically merged in a branch.
If your language is not listed, please ask me to add it. If you prefer to work on an XML file, you should be able [to upload it with Crowdin](https://support.crowdin.com/xml-configuration/).
Crowdin will not pick up changes in develop branch, that's why all translations should be done with this tool.
### Issues:
Issues are handled on Github at: https://github.com/stom79/TubeLab/issues, before opening an issue, please check it has not yet been submitted by someone else
### Contribution to code:
Your contributions are welcomed, but please, use this repo https://framagit.org/tom79/fedilab-tube. You can create PR to the dev branch.

View File

@ -8,6 +8,9 @@ The other app is **[TubeLab](#TubeLab)** a Peertube Android app working for all
Tubelab is an Android app for Peertube (GNU GPLv3). Tubelab is an Android app for Peertube (GNU GPLv3).
[<img alt='Get it on Google Play' src='./images/get-it-on-play.png' height="80"/>](https://play.google.com/store/apps/details?id=app.fedilab.tubelab)
&nbsp;&nbsp;[<img alt='Get it on F-Droid' src='./images/get-it-on-fdroid.png' height="80"/>](https://f-droid.org/packages/app.fedilab.tubelab/)
### Not authenticated mode ### Not authenticated mode
It's a limited mode where you can do some actions: It's a limited mode where you can do some actions:
@ -34,6 +37,11 @@ Many features are available with this mode:
TubeAcad est une application Android open source (GNU GPLv3) pour les instances Peertube académiques. Lauthentification se fait par adresse mail, linstance est automatiquement détectée. Il est également possible sur certaines instances de créer son compte depuis lapplication. TubeAcad est une application Android open source (GNU GPLv3) pour les instances Peertube académiques. Lauthentification se fait par adresse mail, linstance est automatiquement détectée. Il est également possible sur certaines instances de créer son compte depuis lapplication.
[<img alt='Get it on Google Play' src='./images/get-it-on-play.png' height="80"/>](https://play.google.com/store/apps/details?id=app.fedilab.fedilabtube)
&nbsp;&nbsp;[<img alt='Get it on F-Droid' src='./images/get-it-on-fdroid.png' height="80"/>](https://f-droid.org/packages/app.fedilab.fedilabtube/)
### Mode non authentifié ### Mode non authentifié
Ce mode permet de visionner les vidéos sur différentes instances (en sélectionnant une instance académique). Cependant, vous ne pourrez pas interagir totalement avec les vidéos. Vous pourrez : Ce mode permet de visionner les vidéos sur différentes instances (en sélectionnant une instance académique). Cependant, vous ne pourrez pas interagir totalement avec les vidéos. Vous pourrez :
@ -60,19 +68,3 @@ Si vous connectez votre compte, vous pourrez interagir avec les vidéos :
- Signaler des vidéos ou des comptes - Signaler des vidéos ou des comptes
- Voir l'historique - Voir l'historique
### Downloads
#### TubeAcad
[Fdroid](https://f-droid.org/packages/app.fedilab.fedilabtube/)
[GooglePlay](https://play.google.com/store/apps/details?id=app.fedilab.fedilabtube)
#### TubeLab (coming soon)
[Fdroid](https://f-droid.org/packages/app.fedilab.tubelab/)
[GooglePlay](https://play.google.com/store/apps/details?id=app.fedilab.tubelab)

View File

@ -6,12 +6,13 @@ android {
compileSdkVersion 30 compileSdkVersion 30
buildToolsVersion "30.0.2" buildToolsVersion "30.0.2"
defaultConfig { defaultConfig {
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 30 targetSdkVersion 30
versionCode 12 versionCode 25
versionName "1.2.0" versionName "1.7.0"
multiDexEnabled true multiDexEnabled true
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
} }
@ -30,6 +31,10 @@ android {
targetCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8
} }
buildFeatures {
viewBinding = true
}
lintOptions { lintOptions {
disable 'MissingTranslation' disable 'MissingTranslation'
checkReleaseBuilds false checkReleaseBuilds false
@ -92,22 +97,23 @@ dependencies {
implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.preference:preference:1.1.1' implementation 'androidx.preference:preference:1.1.1'
implementation 'com.google.android.material:material:1.2.1' implementation 'com.google.android.material:material:1.2.1'
implementation 'androidx.constraintlayout:constraintlayout:2.0.1' implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation 'androidx.vectordrawable:vectordrawable:1.1.0' implementation 'androidx.vectordrawable:vectordrawable:1.1.0'
implementation 'androidx.navigation:navigation-fragment:2.3.0' implementation 'androidx.navigation:navigation-fragment:2.3.1'
implementation "androidx.fragment:fragment:1.2.5" implementation "androidx.fragment:fragment:1.2.5"
implementation 'androidx.navigation:navigation-ui:2.3.0' implementation 'androidx.navigation:navigation-ui:2.3.1'
implementation ("androidx.navigation:navigation-dynamic-features-fragment:2.3.0") implementation ("androidx.navigation:navigation-dynamic-features-fragment:2.3.1")
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
implementation 'androidx.browser:browser:1.2.0' implementation 'androidx.browser:browser:1.2.0'
implementation 'androidx.documentfile:documentfile:1.0.1'
testImplementation 'junit:junit:4.13' testImplementation 'junit:junit:4.13'
androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0' implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0'
implementation 'com.github.GrenderG:Toasty:1.4.2' implementation 'com.github.GrenderG:Toasty:1.4.2'
implementation 'com.google.android.exoplayer:exoplayer:2.10.6' implementation 'com.google.android.exoplayer:exoplayer:2.12.1'
implementation 'com.google.android.exoplayer:extension-mediasession:2.10.6' implementation 'com.google.android.exoplayer:extension-mediasession:2.12.1'
implementation "com.github.mabbas007:TagsEditText:1.0.5" implementation "com.github.mabbas007:TagsEditText:1.0.5"
implementation "com.github.bumptech.glide:glide:4.11.0" implementation "com.github.bumptech.glide:glide:4.11.0"
annotationProcessor "com.github.bumptech.glide:compiler:4.11.0" annotationProcessor "com.github.bumptech.glide:compiler:4.11.0"
@ -116,8 +122,18 @@ dependencies {
implementation "net.gotev:uploadservice-okhttp:3.5.2" implementation "net.gotev:uploadservice-okhttp:3.5.2"
implementation "com.google.code.gson:gson:2.8.6" implementation "com.google.code.gson:gson:2.8.6"
implementation 'androidx.media:media:1.2.0' implementation 'androidx.media:media:1.2.0'
implementation 'com.github.ybq:Android-SpinKit:1.4.0'
implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.github.mancj:MaterialSearchBar:0.8.5'
implementation "com.github.TorrentStream:TorrentStream-Android:2.7.0"
implementation "io.github.kobakei:ratethisapp:1.2.0"
implementation 'com.github.vkay94:DoubleTapPlayerView:1.0.0'
implementation "androidx.work:work-runtime:2.4.0"
implementation "androidx.work:work-runtime-ktx:2.4.0"
implementation 'jp.wasabeef:glide-transformations:4.0.0'
} }

View File

@ -4,10 +4,6 @@
<color name="colorPrimaryDark">#4527A0</color> <color name="colorPrimaryDark">#4527A0</color>
<color name="colorAccent">#9C27B0</color> <color name="colorAccent">#9C27B0</color>
<color name="colorPrimary_full">#212529</color>
<color name="colorPrimaryDark_full">#000000</color>
<color name="colorAccent_full">#F2690D</color>
<color name="tag_color">#bbF2690D</color> <color name="tag_color">#bbF2690D</color>
<color name="tag_color_text">#FAFAFA</color> <color name="tag_color_text">#FAFAFA</color>
<color name="positive_thumbs">#2b90d9</color> <color name="positive_thumbs">#2b90d9</color>

View File

@ -1,21 +1,123 @@
<resources> <?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="app_name" translatable="false">TubeAcad</string> <string name="app_name" translatable="false">TubeAcad</string>
<string name="app_id" translatable="false">app.fedilab.fedilabtube</string>
<string name="set_video_mode_choice" translatable="false">set_video_mode_choice</string>
<string name="set_video_minimize_choice" translatable="false">set_video_minimize_choice</string>
<string name="set_video_language_choice" translatable="false">set_video_language_choice</string>
<string name="set_video_quality_choice" translatable="false">set_video_quality_choice</string>
<string name="set_video_cache_choice" translatable="false">set_video_cache_choice</string>
<string name="set_autoplay_choice" translatable="false">set_autoplay_choice</string>
<string name="set_theme_choice" translatable="false">set_theme_choice</string>
<string name="set_fullscreen_choice" translatable="false">set_fullscreen_choice</string>
<string name="set_autoplay_next_video_choice" translatable="false">set_autoplay_next_video_choice</string>
<string name="set_store_in_history" translatable="false">set_store_in_history</string>
<string name="set_play_screen_lock_choice" translatable="false">set_play_screen_lock_choice</string>
<string name="set_video_in_list_choice" translatable="false">set_video_in_list_choice</string>
<string name="set_video_sensitive_choice" translatable="false">set_video_sensitive_choice</string>
<string name="set_video_in_list">Vidéos dans une liste</string>
<string name="set_video_in_list_description">Change la mise en page pour afficher les vidéos dans une liste</string>
<string name="export_list">Exporter</string>
<string name="import_list">Importer</string>
<string name="delete_history">Supprimer l\'historique de vidéos</string>
<string name="delete_history_confirm">Êtes vous sur de vouloir supprimer toutes les vidéos de votre historique ?</string>
<string name="export_notification_title">Exportation réussie !</string>
<string name="export_notification_content">Cliquer ici pour envoyer l\'exportation par mèl.</string>
<string name="export_notification_subjet">Nouvelle liste de lecture</string>
<string name="export_notification_body">Ouvrez la pièce jointe avec l\'application TubeAcad</string>
<string name="show_more">Montrer plus</string>
<string name="show_less">Montrer moins</string>
<string name="no_instances">Aucune instance !</string>
<string name="set_play_screen_lock">Verrouillage d\'écran</string>
<string name="set_play_screen_lock_description">Continuer à lire des vidéos lorsque l\'écran est verrouillé</string>
<string name="change_profile_picture">Modifier la photo de profil</string>
<string name="account_updated">Le compte a été mis à jour !</string>
<string name="new_video">Nouvelle vidéo</string>
<string name="new_blacklist">New blacklist info</string>
<string name="new_my_video_published">Your video is published</string>
<string name="new_my_video_error">Error when publishing your video</string>
<string name="new_comment">New comment</string>
<string name="new_follow">New follow</string>
<string name="notif_new_video">Nouvelle vidéo depuis vos souscriptions</string>
<string name="notif_new_comment">Nouveau commentaire sur votre vidéo</string>
<string name="notif_blocked">Une de vos vidéos est bloquée/débloquée</string>
<string name="notif_video_published">Vidéo publiée (après transcodage / mise à jour programmée)</string>
<string name="notif_video_imported">Import de vidéo terminé</string>
<string name="notif_new_followers">Vous ou votre chaîne avez/a un·e nouvel·le abonné·e</string>
<string name="notif_video_mention">Quelqu\'un vous a mentionné dans les commentaires d\'une vidéo</string>
<string name="notif_abuse_received">Un signalement d\'abus a reçu un nouveau message</string>
<string name="notif_abuse_accepted">Un de vos rapports d\'abus a été accepté ou rejeté par les modérateurs</string>
<string name="save">Enregistrer</string>
<string name="set_autoplay_next_video">Lire automatiquement la vidéo suivante</string>
<string name="set_autoplay_next_video_description">Quand une vidéo est terminée, lire la prochaine vidéo suggérée.</string>
<string name="enable_history">Activer l\'historique</string>
<string name="set_autoplay">Lecture automatique</string>
<string name="set_autoplay_description">Si activé, les vidéos seront lues automatiquement</string>
<string name="set_fullscreen">Plein écran</string>
<string name="set_fullscreen_description">Ouvre automatiquement les vidéos en plein écran</string>
<string name="delete_account_comment">Supprimer tous les commentaires</string>
<string name="delete_account_comment_confirm">Etes-vous sûr de vouloir supprimer tous les commentaires de ce compte pour vos vidéos ?</string>
<string-array name="settings_theme">
<item>Clair</item>
<item>Sombre</item>
<item>Automatique</item>
</string-array>
<string name="refresh_every">Mettre à jour toutes les :</string>
<string-array name="refresh_time">
<item>Jamais</item>
<item>15 minutes</item>
<item>30 minutes</item>
<item>1 heure</item>
<item>2 heures</item>
<item>6 heures</item>
<item>12 heures</item>
</string-array>
<plurals name="number_of_replies">
<item quantity="zero">%d réponse</item>
<item quantity="one">%d réponse</item>
<item quantity="other">%d réponses</item>
</plurals>
<string name="set_theme">Thème</string>
<string name="set_theme_description">Permet de changer le thème de l\'application</string>
<string name="federation_issue">La vidéo ne peut pas être fédérée !</string>
<string name="title_home">Locale</string> <string name="title_home">Locale</string>
<string name="title_local">Locale</string> <string name="title_local">Locale</string>
<string name="title_discover">Découvrir</string> <string name="title_discover">Découvrir</string>
<string name="title_notifications">Notifications</string> <string name="title_notifications">Notifications</string>
<string name="title_instances">Instances</string>
<string name="title_recently_added">Nouveautés</string> <string name="title_recently_added">Nouveautés</string>
<string name="title_trending">Tendances</string> <string name="title_trending">Tendances</string>
<string name="title_account">Compte</string>
<string name="title_most_liked">Plus aimées</string> <string name="title_most_liked">Plus aimées</string>
<string name="toast_error">Une erreur s\'est produite !</string> <string name="toast_error">Une erreur s\'est produite !</string>
<string name="title_muted">Sourdine</string>
<string name="title_channel">Chaînes</string>
<string name="do_not_list">Ne pas lister</string>
<string name="blur">Estomper</string>
<string name="display">Afficher</string>
<string name="no_opinion">Pas d\'opinion</string>
<string name="instance_choice">Choisissez une instance</string>
<string name="not_valide_instance">Cette instance ne semble pas être valide !</string>
<string name="no_videos">Aucune vidéo !</string> <string name="no_videos">Aucune vidéo !</string>
<string name="no_notifications">Aucune notification !</string>
<string name="favicon">Favicon</string> <string name="favicon">Favicon</string>
<string name="open_with">Ouvrir avec</string> <string name="open_with">Ouvrir avec</string>
<string name="action_playlist_edit">Modifier une liste de lecture</string>
<string name="close">Fermer</string> <string name="close">Fermer</string>
<string name="upload_video">Téléverser</string> <string name="upload_video">Téléverser</string>
<string name="bookmark_peertube_empty">Il ny a aucune vidéo Peertube dans vos favoris !</string>
<string name="image_preview">Aperçu de l\'image</string> <string name="image_preview">Aperçu de l\'image</string>
<string name="file_to_upload">Sélectionnez un fichier à transférer</string> <string name="file_to_upload">Sélectionnez un fichier à transférer</string>
<string name="channel">Chaîne</string> <string name="channel">Chaîne</string>
@ -26,142 +128,124 @@
<string name="cancel">Annuler</string> <string name="cancel">Annuler</string>
<string name="download">Télécharger</string> <string name="download">Télécharger</string>
<string name="profile_picture">Photo du profil</string> <string name="profile_picture">Photo du profil</string>
<string name="update_video">Mettre à jour la vidéo</string> <string name="update_video">Mettre à jour la vidéo</string>
<!-- Date --> <string name="remove_from_playlist">Supprimer de la liste de lecture</string>
<string name="date_seconds">%d s</string> <string name="date_seconds">%d s</string>
<string name="date_minutes">%d min</string> <string name="date_minutes">%d min</string>
<string name="date_hours">%d h</string> <string name="date_hours">%d h</string>
<string name="date_day">%d j</string> <string name="date_day">%d j</string>
<string name="number_view_video">%s vues</string> <string name="number_view_video">%s vues</string>
<string name="duration_video">Durée : %s</string> <string name="title_instance_login">Domaine de l\'instance</string>
<string name="toot_select_image_error">Une erreur sest produite lors de la sélection du média!</string>
<string name="uploading">Transfert en cours, veuillez patienter …</string> <string name="uploading">Transfert en cours, veuillez patienter …</string>
<string name="upload_video_success">La vidéo a été transférée !</string> <string name="upload_video_success">La vidéo a été transférée !</string>
<string name="toast_cancelled">Transfert annulé !</string> <string name="toast_cancelled">Transfert annulé !</string>
<string name="video_uploaded_action">Cliquez ici pour éditer les données de la vidéo.</string> <string name="video_uploaded_action">Cliquez ici pour éditer les données de la vidéo.</string>
<string name="toot_select_image">Sélectionnez un média</string> <string name="toot_select_image_error">Une erreur sest produite lors de la sélection du média!</string>
<string name="download_file">Télécharger %1$s</string> <string name="download_file">Télécharger %1$s</string>
<string name="action_privacy">Confidentialité</string>
<string name="action_logout">Déconnexion</string>
<string name="delete_video_confirmation">Êtes-vous sûr de vouloir supprimer cette vidéo ?</string> <string name="login">Connexion</string>
<string name="toast_peertube_video_updated">La vidéo a été mise à jour !</string> <string name="password">Mot de passe</string>
<string name="email">Courriel</string>
<string name="tags">Étiquettes</string>
<string name="validate">Valider</string>
<string name="share_with">Partager avec</string>
<string name="shared_via">Partagé via TubeLab</string>
<string name="username">Nom dutilisateur</string>
<string name="settings">Paramètres</string>
<string name="logout_account_confirmation">Voulez-vous vraiment déconnecter le compte @%1$s@%2$s ?</string>
<string name="following">Suit</string>
<string name="followers">Abonné·e·s</string>
<string name="client_error">Impossible dobtenir lid du client!</string>
<string name="toast_error_loading_account">Une erreur sest produite pendant le chargement du compte!</string>
<string name="toast_error_search">Une erreur sest produite lors de la recherche!</string>
<string name="nothing_to_do">Aucune action ne peut être réalisée</string>
<string name="action_follow">S\'abonner</string>
<string name="action_mute">Mettre en sourdine</string>
<string name="search">Chercher</string>
<string name="delete">Supprimer</string>
<string name="action_lists_confirm_delete">Êtes-vous sûr de vouloir supprimer définitivement cette liste de lecture ?</string>
<string name="action_lists_delete">Supprimer la liste de lecture</string>
<string name="no_comments">Soyez le·a premier·ère à laisser un commentaire sur cette vidéo en utilisant le bouton supérieur droit !</string>
<string name="comment_no_allowed_peertube">Les commentaires sur cette vidéos ont été désactivés !</string> <string name="comment_no_allowed_peertube">Les commentaires sur cette vidéos ont été désactivés !</string>
<string name="pickup_resolution">Choisissez une résolution</string>
<string name="bookmark_add_peertube">La vidéo est rajoutée aux favoris !</string> <string name="bookmark_add_peertube">La vidéo est rajoutée aux favoris !</string>
<string name="bookmark_remove_peertube">La vidéo a été retirée de vos favoris !</string> <string name="bookmark_remove_peertube">La vidéo a été retirée de vos favoris !</string>
<string name="information" tools:ignore="UnusedResources">Information</string>
<string name="app_logo">Logo de lapplication</string>
<!-- languages not translated -->
<string name="subscriptions">Abonnements</string>
<string name="delete_instance">Supprimer l\'instance</string>
<string name="delete_instance_confirm">Etes-vous sûr de vouloir supprimer cette instance ?</string>
<string name="shared_via">Partagé via TubeLab</string>
<string name="share_with">Partager avec</string>
<string name="pickup_resolution">Choisissez une résolution</string>
<string name="fullscreen">Vidéo plein écran</string>
<string name="comment">Commenter</string>
<string name="validate">Valider</string>
<string name="delete_comment">Supprimer le commentaire</string> <string name="delete_comment">Supprimer le commentaire</string>
<string name="delete_comment_confirm">Etes-vous sûr de vouloir supprimer ce commentaire ?</string> <string name="delete_comment_confirm">Etes-vous sûr de vouloir supprimer ce commentaire ?</string>
<string name="set_video_mode">Mode pour les vidéos</string>
<string name="toot_sent">Le message a été envoyé !</string> <string name="filter">Filtrer</string>
<string name="reply">Répondre</string> <string name="sepia_search">Recherche sépia</string>
<string name="delete">Supprimer</string> <string name="sepia_element_nsfw">Afficher le contenu sensible</string>
<string name="no_video_to_display">Aucune vidéo nest disponible !</string> <string name="sepia_element_published_date">Date de publication</string>
<string name="any">Toutes</string>
<string name="today">Aujourd\'hui</string>
<string name="last_7_days">Les 7 derniers jours</string>
<string name="last_30_days">Les 30 derniers jours</string>
<string name="last_365_days">Les 365 derniers jours</string>
<string name="sepia_element_duration">Durée</string>
<string name="duration_short"><![CDATA[Courte (<4 min)]]></string>
<string name="duration_medium"><![CDATA[Moyenne (4-10 min)]]></string>
<string name="duration_long"><![CDATA[Longue (> 10 min)]]></string>
<string name="display_all_categories">Afficher toutes les catégories</string>
<string name="display_all_licenses">Afficher toutes les licences</string>
<string name="display_all_languages">Afficher toutes les langues</string>
<string name="all_of_these_tags">Tous ces labels</string>
<string name="one_of_these_tags">Un de ces labels</string>
<string name="apply_filter">Appliquer le filtre</string>
<string-array name="sort_by_array">
<item>Meilleurs résultats</item>
<item>Les plus récentes</item>
<item>Les moins récentes</item>
</string-array>
<string name="sort_by">Trier par</string>
<string name="sepia_search_hint">Mot-clé, chaîne, vidéo, etc.</string>
<string name="sepia_indication">La recherche Sepia affiche les vidéos et les chaînes qui correspondent à votre recherche mais qui n\'est pas l\'éditeur, ni le propriétaire. Si vous remarquez des problèmes avec une vidéo, signalez-la aux administrateurs sur le site Web de PeerTube où la vidéo est publiée.</string>
<string name="my_videos">Mes vidéos</string> <string name="my_videos">Mes vidéos</string>
<string name="title">Titre</string> <string name="title">Titre</string>
<string name="license">Licence</string> <string name="license">Licence</string>
<string name="category">Catégorie</string> <string name="category">Catégorie</string>
<string name="language">Langue</string> <string name="language">Langue</string>
<string name="description">Description</string>
<string name="tags">Étiquettes</string>
<string name="action_privacy">Confidentialité</string>
<string name="peertube_nsfw">Cette vidéo contient du contenu pour adultes</string> <string name="peertube_nsfw">Cette vidéo contient du contenu pour adultes</string>
<string name="delete_video">Supprimer la vidéo</string>
<string name="peertube_enable_comments">Activer les commentaires</string> <string name="peertube_enable_comments">Activer les commentaires</string>
<string name="send_comment">Envoyer un commentaire</string> <string name="description">Libellé</string>
<string name="add_public_comment">Ajouter un commentaire public</string> <string name="toast_peertube_video_updated">La vidéo a été mise à jour !</string>
<string name="share">Partager</string> <string name="register_account">Créer un compte</string>
<string name="no_comments">Soyez le·a premier·ère à laisser un commentaire sur cette vidéo en utilisant le bouton supérieur droit !</string>
<string name="title_video_peertube">Titre de la vidéo</string>
<string name="set_video_mode">Mode pour les vidéos</string>
<string name="display_nsfw_videos">Afficher les vidéos sensibles</string>
<string name="action_playlist_add">Vous n\'avez aucune liste de lecture. Cliquez sur l\'icône « + » pour en ajouter une</string>
<string name="not_logged_in">Vous devez être connecté.e pour effectuer cette action !</string>
<string name="change_instance">Changer d\'instance</string>
<string name="account">Compte</string>
<string name="instance_choice">Choisissez une instance</string>
<string name="toast_error_loading_account">Une erreur sest produite pendant le chargement du compte!</string>
<string name="profile_banner">Bannière du profil</string>
<string name="make_an_action">Faire une action</string>
<string name="go_back">Retour</string>
<string name="open_menu">Ouvrir le menu</string>
<string name="display_more">Afficher plus</string>
<string name="edit_profile">Éditer le profil</string>
<string name="followed_by">Vous suit</string>
<string name="no_channels">Aucune chaîne !</string>
<string name="following">Suit</string>
<string name="followers">Abonné·e·s</string>
<string name="title_instance_login">Domaine de l\'instance</string>
<string name="followers_count">%1$s Abonné·e·s</string>
<string name="nothing_to_do">Aucune action ne peut être réalisée</string>
<string name="unfollow_confirm">Voulez-vous vous désabonner de ce compte ?</string>
<string name="action_unfollow">Se désabonner</string>
<string name="action_follow">S\'abonner</string>
<string name="search">Chercher</string>
<string name="toast_error_search">Une erreur sest produite lors de la recherche!</string>
<string name="no_result">Aucun résultat !</string>
<string name="app_logo">Logo de lapplication</string>
<string name="join_peertube">Rejoignez Peertube</string>
<string name="username">Nom dutilisateur</string>
<string name="email_address">Adresse mèl</string> <string name="email_address">Adresse mèl</string>
<string name="password">Mot de passe</string> <string name="preview">Aperçu</string>
<string name="add_account">Ajouter un compte</string> <string name="change_preview">Modifier l\'aperçu</string>
<string name="login">Connexion</string> <string name="name">Nom</string>
<string name="client_error">Impossible dobtenir lid du client!</string> <string name="display_more">Afficher plus</string>
<string name="email">Email</string> <string name="no_channels">Aucune chaîne !</string>
<string name="email_indicator">Vous recevrez un e-mail de confirmation</string> <string name="report_helper">Quelques explications concernant votre signalement…</string>
<string name="password_indicator">Utilisez au moins 8 caractères</string> <string name="report_video">Signaler la vidéo</string>
<string name="password_confirm">Confirmer le mot de passe</string> <string name="report">Signaler</string>
<string name="agreement_check_peertube">J\'ai au moins 16 ans et je suis d\'accord avec les %1$s de cette instance</string> <string name="change_instance">Changer d\'instance</string>
<string name="sign_up">Sinscrire</string> <string name="my_history">Historique</string>
<string name="account_created">Compte créé !</string> <string name="edit">Modifier</string>
<string name="account_created_message">Votre compte est créé !\n\nVous allez recevoir un email de confirmation à l\'adresse <b>%1$s</b>.\n\nCliquez sur le lien présent dans le mail pour valider votre compte.</string> <string name="video_settings">Réglages des vidéos</string>
<string name="all_field_filled">Veuillez remplir tous les champs !</string> <string name="app_interface">Interface</string>
<string name="password_length_error">Le mot de passe doit contenir 6 caractères !</string> <string name="set_cache_mode">Cache</string>
<string name="password_error">Les mots de passe ne sont pas identiques !</string> <string name="set_video_cache_description">Définir le cache pour les vidéos (par défaut 100Mo)</string>
<string name="email_error">L\'e-mail ne semble pas être valide !</string> <string name="set_video_quality_description">Définir une qualité par défaut pour les vidéos</string>
<string name="password_too_short">Le mot de passe doit contenir au moins 8 caractères</string> <string name="set_quality_mode">Résolution pour les vidéos</string>
<string name="username_error">Le nom d\'utilisateur·rice doit être en minuscule, contenir uniquement des lettres, des chiffres, des points et des caractères de soulignement</string> <string name="video_cache_value">Cache vidéo : %d Mo</string>
<string name="tos">conditions de service</string> <string name="captions">Légendes</string>
<string name="server_rules">règles du serveur</string> <string name="pickup_captions">Options d\'envoi</string>
<string name="agreement_check">J\'accepte les %1$s et les %2$s</string> <string name="none">Aucune</string>
<string name="email_error_domain">Les adresses mails %1$s ne sont pas autorisées !</string> <string name="set_video_mode_description">Permet de changer le mode de lecture pour les vidéos (normal, streaming ou via un navigateur).</string>
<string name="create_an_account">Créer un compte</string> <string name="delete_video">Supprimer la vidéo</string>
<string name="action_logout">Déconnexion</string> <string name="delete_video_confirmation">Êtes-vous sûr de vouloir supprimer cette vidéo ?</string>
<string name="logout_account_confirmation">Voulez-vous vraiment déconnecter le compte @%1$s@%2$s ?</string> <string name="no_video_to_display">Aucune vidéo nest disponible !</string>
<string name="share">Partager</string>
<string name="action_lists_delete">Supprimer la liste de lecture</string>
<string name="action_lists_confirm_delete">Êtes-vous sûr de vouloir supprimer définitivement cette liste de lecture ?</string>
<string name="action_channel_confirm_delete">Êtes-vous sûr de vouloir supprimer définitivement cette chaîne ?</string>
<string name="action_playlist_create">Créer une liste de lecture</string>
<string name="action_playlist_edit">Modifier une liste de lecture</string>
<string name="display_name">Nom d\'affichage</string>
<string name="error_channel_mandatory">Une chaîne est requise lorsque la liste de lecture est publique.</string>
<string name="error_display_name">Vous devez fournir un nom d\'affichage !</string>
<string name="error_display_name_channel">Vous devez fournir un nom d\'affichage et un nom pour la chaîne!</string>
<string name="action_playlist_empty_content">Cette liste de lecture est vide.</string>
<string name="playlists">Listes de lecture</string>
<string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> a commenté votre vidéo <b>%2$s</b>]]></string> <string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> a commenté votre vidéo <b>%2$s</b>]]></string>
<string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> suit votre chaîne <b>%2$s</b>]]></string> <string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> suit votre chaîne <b>%2$s</b>]]></string>
<string name="peertube_follow_account"><![CDATA[<b>%1$s</b> suit votre compte]]></string> <string name="peertube_follow_account"><![CDATA[<b>%1$s</b> suit votre compte]]></string>
@ -171,112 +255,105 @@
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> a publié une nouvelle vidéo : <b>%2$s</b>]]></string> <string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> a publié une nouvelle vidéo : <b>%2$s</b>]]></string>
<string name="peertube_video_blacklist"><![CDATA[Votre vidéo <b>%1$s</b> a été blacklisté]]></string> <string name="peertube_video_blacklist"><![CDATA[Votre vidéo <b>%1$s</b> a été blacklisté]]></string>
<string name="peertube_video_unblacklist"><![CDATA[Votre vidéo <b>%1$s</b> nest plus blacklisté]]></string> <string name="peertube_video_unblacklist"><![CDATA[Votre vidéo <b>%1$s</b> nest plus blacklisté]]></string>
<string name="peertube_video_abuse"><![CDATA[Nouvelle modération sur la vidéo : <b>%1$s</b>]]></string> <string name="peertube_video_abuse"><![CDATA[Nouveau signalement pour la vidéo : <b>%1$s</b>]]></string>
<string name="toast_code_error">Une erreur sest produite! Linstance na retourné aucun code d\autorisation!</string> <string name="add_public_comment">Ajouter un commentaire public</string>
<string name="subscriptions">Abonnements</string> <string name="add_public_reply">Répondre publiquement</string>
<string name="report">Signaler</string> <string name="send_comment">Envoyer un commentaire</string>
<string name="report_video">Signaler la vidéo</string> <string name="all">Tout</string>
<string name="activity">Activité</string>
<string name="app">App</string>
<string name="fetch_notification_channel_name">Mise à jour des notifications</string>
<string name="peertube_video_report_success"><![CDATA[ Votre signalement <b>%1$s</b> a été accepté]]></string>
<string name="reply">Répondre</string>
<!-- end languages -->
<string name="playlists">Listes de lecture</string>
<string name="display_name">Nom d\'affichage</string>
<string name="action_playlist_add">Vous n\'avez aucune liste de lecture. Cliquez sur l\'icône « + » pour en ajouter une</string>
<string name="error_display_name">Vous devez fournir un nom d\'affichage !</string>
<string name="error_channel_mandatory">Une chaîne est requise lorsque la liste de lecture est publique.</string>
<string name="action_playlist_create">Créer une liste de lecture</string>
<string name="action_playlist_empty_content">Cette liste de lecture est vide.</string>
<string name="password_confirm">Confirmer le mot de passe</string>
<string name="agreement_check">J\'accepte les %1$s et les %2$s</string>
<string name="server_rules">règles du serveur</string>
<string name="tos">conditions de service</string>
<string name="sign_up">Sinscrire</string>
<string name="all_field_filled">Veuillez remplir tous les champs !</string>
<string name="password_error">Les mots de passe ne sont pas identiques !</string>
<string name="email_error">L\'e-mail ne semble pas être valide !</string>
<string name="email_indicator">Vous recevrez un e-mail de confirmation</string>
<string name="password_indicator">Utilisez au moins 8 caractères</string>
<string name="password_too_short">Le mot de passe doit contenir au moins 8 caractères</string>
<string name="username_error">Le nom d\'utilisateur·rice doit être en minuscule, contenir uniquement des lettres, des chiffres, des points et des caractères de soulignement</string>
<string name="account_created">Compte créé !</string>
<string name="account_created_message">Votre compte est créé !\n\nVous allez recevoir un email de confirmation à l\'adresse <b>%1$s</b>.\n\nCliquez sur le lien présent dans le mail pour valider votre compte.</string>
<string name="account">Compte</string>
<string name="report_account">Signaler le compte</string> <string name="report_account">Signaler le compte</string>
<string name="report_helper">Quelques explications concernant votre signalement…</string> <string-array name="settings_video_mode">
<item>Normal</item>
<item>Navigateur</item>
<item>Magnet</item>
<item>Torrent</item>
</string-array>
<string-array name="settings_video_quality">
<item>Élevée</item>
<item>Moyenne</item>
<item>Faible</item>
</string-array>
<string name="unfollow_confirm">Voulez-vous vous désabonner de ce compte ?</string>
<string name="no_playlist">Aucune liste de lecture !</string>
<string name="title_video_peertube">Titre de la vidéo</string>
<string name="join_peertube">Rejoignez Peertube</string>
<string name="agreement_check_peertube">J\'ai au moins 16 ans et je suis d\'accord avec les %1$s de cette instance</string>
<string name="edit_profile">Éditer le profil</string>
<string name="make_an_action">Faire une action</string>
<string name="action_unfollow">Se désabonner</string>
<string name="display_nsfw_videos">Afficher les vidéos sensibles</string>
<string name="fullscreen">Vidéo plein écran</string>
<string name="bookmark_peertube_empty">Il ny a aucune vidéo Peertube dans vos favoris !</string>
<string name="delete_channel">Supprimer la chaîne</string>
<string name="action_channel_confirm_delete">Êtes-vous sûr de vouloir supprimer définitivement cette chaîne ?</string>
<string name="modify_playlists">Vidéo dans les listes de lecture</string>
<string name="no_muted">Aucun compte en sourdine !</string>
<string name="error_display_name_channel">Vous devez fournir un nom d\'affichage et un nom pour la chaîne!</string>
<string name="action_channel_create">Créer une chaîne</string>
<string name="action_channel_edit">Modifier une chaîne</string>
<string name="email_error_domain">Les adresses mails %1$s ne sont pas autorisées !</string>
<string name="report_comment_size">Veuillez préciser les raisons.</string>
<string name="not_logged_in">Vous devez être connecté.e pour effectuer cette action !</string>
<string name="successful_report">Le compte a été signalé !</string> <string name="successful_report">Le compte a été signalé !</string>
<string name="successful_report_comment">Le commentaire a été signalé !</string> <string name="successful_report_comment">Le commentaire a été signalé !</string>
<string name="successful_video_report">La vidéo a été signalée !</string> <string name="successful_video_report">La vidéo a été signalée !</string>
<string name="report_comment_size">Veuillez préciser les raisons.</string> <string name="password_length_error">Le mot de passe doit contenir 6 caractères !</string>
<string name="all">Tout</string>
<string name="my_history">Historique</string>
<string name="edit_video">Modifier une vidéo</string>
<string name="settings">Paramètres</string>
<string name="video_settings">Paramètres des vidéos</string>
<string name="app_interface">Interface</string>
<string-array name="settings_video_mode">
<item>Normal</item>
<item>Streaming</item>
<item>Navigateur</item>
</string-array>
<string name="set_cache_mode">Cache</string>
<string name="set_video_cache_description">Set the cache for videos (default 100Mb)</string>
<string name="video_cache_value">Cache pour les vidéos: %d Mo</string>
<string name="set_video_mode_choice" translatable="false">set_video_mode_choice</string>
<string name="set_video_minimize_choice" translatable="false">set_video_minimize_choice</string>
<string name="set_video_language_choice" translatable="false">set_video_language_choice</string>
<string name="set_video_quality_choice" translatable="false">set_video_quality_choice</string>
<string name="set_video_cache_choice" translatable="false">set_video_cache_choice</string>
<string-array name="settings_video_quality">
<item>Elevé</item>
<item>Moyen</item>
<item>Faible</item>
</string-array>
<string name="set_video_quality_description">Permet de définir la qualité de la vidéo par défaut</string>
<string name="set_quality_mode">Résolution pour les vidéos</string>
<string name="set_video_mode_description">Permet de changer le mode de lecture pour les vidéos (normal, streaming ou via un navigateur).</string>
<string name="register_account">Créer un compte</string>
<string name="preview">Aperçu</string>
<string name="change_preview">Modifier l\'aperçu</string>
<string name="title_muted">Sourdine</string>
<string name="title_blocked">Bloqués</string>
<string name="no_muted">Aucun compte en sourdine !</string>
<string name="no_notifications">Aucune notification !</string>
<string name="action_mute">Mettre en sourdine</string>
<string name="action_unmute">Réactiver le compte</string>
<string name="muted_done">Le compte a été mis en sourdine !</string> <string name="muted_done">Le compte a été mis en sourdine !</string>
<string name="title_channel">Chaînes</string> <string name="edit_video">Modifier une vidéo</string>
<string name="captions">Sous-titres</string> <string name="create_an_account">Créer un compte</string>
<string name="none">Aucun</string> <string name="followers_count">%1$s Abonné·e·s</string>
<string name="pickup_captions">Sélectionner des sous-titres</string>
<string name="name">Nom</string>
<string name="action_channel_create">Créer une chaîne</string>
<string name="action_channel_edit">Modifier une chaîne</string>
<string name="delete_channel">Supprimer la chaîne</string>
<string name="display_list">Afficher la liste</string>
<string name="delete_list">Supprimer la liste de lecture</string>
<string name="edit">Modifier</string>
<string name="not_valide_instance">Cette instance ne semble pas être valide !</string>
<string name="developer">Développeur</string> <string name="developer">Développeur</string>
<string name="about_vesrion">Version %1$s</string> <string name="about_vesrion">Version %1$s</string>
<string name="about_the_app">À propos de lapplication</string> <string name="about_the_app">À propos de lapplication</string>
<string name="Donate">Faire un don</string> <string name="Donate">Faire un don</string>
<string name="source_code">Code source</string> <string name="source_code">Code source</string>
<string name="issue_tracker">Suivi des tickets</string> <string name="issue_tracker">Suivi des tickets</string>
<string name="action_instance_empty_content">Aucune instance ne correspond à ces critères</string>
<string name="action_instance_empty_content">No instances match these criteria</string> <string name="instances_picker">Sélecteur d\'instances</string>
<string name="instances_picker">Instances picker</string> <string name="pickup_instance">Choisissez une instance</string>
<string name="pickup_instance">Pickup this instance</string> <string name="sensitive_video"> Vidéos sensibles</string>
<string name="sensitive_content">Sensitive content: %1$s</string> <string name="sensitive_content">Contenu sensible : %1$s</string>
<string name="followers_instance">%1$s instance followers</string> <string name="followers_instance">%1$s instances suiveuses</string>
<string name="help">Help</string> <string name="help">Aide</string>
<string name="sensitive_video"> Sensitive videos</string> <string name="pickup_categories">Sélection des catégories</string>
<string name="pickup_categories">Pickup categories</string> <string name="pickup_languages">Sélection des langues</string>
<string name="do_not_list">Do not list</string>
<string name="blur">Blur</string>
<string name="display">Display</string>
<string name="no_opinion">No opinion</string>
<string name="pickup_languages">Pickup languages</string>
<string name="notification_channel_name">Mise à jour des informations</string> <string name="notification_channel_name">Mise à jour des informations</string>
<string name="add_account">Ajouter un compte</string>
<string name="list_of_accounts">Liste des comptes</string> <string name="list_of_accounts">Liste des comptes</string>
<string name="pause">Pause</string> <string name="pause">Pause</string>
<string name="play">Lecture</string> <string name="play">Jouer</string>
<string name="minimize">Réduire</string> <string name="minimize">Minimiser</string>
<string name="fast_rewind">Retour rapide</string> <string name="fast_rewind">Rembobinage rapide</string>
<string name="fast_forward">Avance rapide</string> <string name="fast_forward">Avance rapide</string>
<string name="set_video_minimize">Minimiser la taille des vidéos</string>
<string name="set_video_minimize">Réduire la taille des vidéos</string> <string name="set_video_minimize_description">Minimiser la taille des vidéos lorsque l\'application est en arrière-plan (Android N+)</string>
<string name="set_video_minimize_description">Réduit la taille des vidéos quand l\'application est en arrière plan (Android N+)</string> <string name="set_video_language">Filtre de langue</string>
<string name="set_video_language_description">Filtrer les vidéos avec différentes langues</string>
<string name="set_video_language">Filtrer les langues</string>
<string name="set_video_language_description">Filtrer les vidéos en fonction de la langue</string>
</resources> </resources>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path
name="my_images"
path="/TubeAcad/" />
</paths>

View File

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="app.fedilab.fedilabtube">
<application
android:name=".FedilabTube"
android:allowBackup="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:replace="android:allowBackup">
<activity
android:name=".MainActivity"
tools:node="merge">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="content" />
<data android:scheme="file" />
<data android:mimeType="*/*" />
<data android:pathPattern=".*\\.tubelab" />
<data android:pathPattern=".*\\..*\\.tubelab" />
<data android:pathPattern=".*\\..*\\..*\\.tubelab" />
<data android:pathPattern=".*\\..*\\..*\\..*\\.tubelab" />
<data android:pathPattern=".*\\..*\\..*\\..*\\..*\\.tubelab" />
<data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\.tubelab" />
</intent-filter>
</activity>
</application>
</manifest>

View File

@ -1,4 +1,5 @@
- Force le mode paysage lors du passage en mode plein écran - Nouvelles options :
- Modifier la valeur du cache pour les vidéos - Mode plein écran automatique
- Définir la résolution par défaut pour les vidéos - Désactiver la lecture automatique des vidéos
- Correction de bugs
- Quelques corrections de bugs

View File

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="app.fedilab.fedilabtube">
<application
android:name=".FedilabTube"
android:allowBackup="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:replace="android:allowBackup">
<activity
android:name=".PeertubeActivity"
tools:node="mergeOnlyAttributes">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- The app is a good candidate for URL in https://domain.name/videos/watch/xxxxx-->
<data
android:host="*"
android:pathPrefix="/videos/watch/"
android:scheme="https" />
</intent-filter>
</activity>
</application>
</manifest>

View File

@ -1 +1 @@
TubeLab est une application Peertube pour les instances académiques. App for all Peertube instances

View File

@ -1 +1 @@
TubeLab ist eine Peertube-App für akademische Instanzen. App für alle Peertube Instanzen

View File

@ -1 +1 @@
Το TubeLab είναι μια εφαρμογή για τις ακαδημαϊκές υποστάσεις Peertube. Εφαρμογή για όλες τις υποστάσεις Peertube

View File

@ -1 +1 @@
TubeLab est une application Peertube pour les instances académiques. App for all Peertube instances

View File

@ -1 +1 @@
TubeLab es una aplicación de Peertube para instancias académicas. Aplicación para todas las instancias de Peertube

View File

@ -1 +1 @@
TubeLab est une application Peertube pour les instances académiques. Application pour toutes les instances de Peertube

View File

@ -1 +1 @@
TubeLab è un'applicazione Peertube per le istanze accademiche. App per tutti i casi Peertube

View File

@ -1 +1 @@
TubeLab est une application Peertube pour les instances académiques. App for all Peertube instances

View File

@ -1 +1 @@
TubeLab est une application Peertube pour les instances académiques. App for all Peertube instances

View File

@ -1 +1 @@
TubeLab is een Peertube-toepassing voor academische instanties. App voor alle Peertube gevallen

View File

@ -1,22 +1,22 @@
*Nie ma trybu uwierzytelnionego* *Tryb bez uwierzytelniania*
Jest to tryb ograniczony, w którym można wykonywać pewne czynności: Jest to tryb ograniczony, w którym można wykonywać niektóre czynności:
- Przełącznik, - Przełączać sesje,
- Podziel się filmami, - Udostępniać filmy,
- Pobierz filmy. - Pobier filmy.
*Tryb uwierzytelniony* *Tryb uwierzytelniony*
W tym trybie dostępnych jest wiele funkcji: W tym trybie dostępnych jest wiele funkcji:
- Napisać/usunąć komentarz - Pisanie/Usuwanie komentarzy
- Przesyłanie/usuwanie/edycja filmów - Przesyłanie/Usuwanie/Edytowanie filmów
- Zarządzanie (tworzenie/edycja/usuwanie) kanałami i listami odtwarzania - Zarządzanie (tworzenie/edytowanie/usuwanie) kanałami i listami odtwarzania
- Kanały podążające/niepodążające - Obserwowanie kanałów
- Kciuki w górę/w dół - Kciuki w górę/w dół
- Powiadomienia o kontroli - Sprawdzanie powiadomień
- Kanały wyciszone/niewyciszone - Wyciszanie kanałów
- Raporty wideo/rachunki - Zgłaszanie filmów/kont
- Sprawdź swoją historię - Sprawdzanie swojej historii

View File

@ -1 +1 @@
TubeLab jest aplikacją Peertube dla instancji akademickich. Aplikacja dla wszystkich instancji PeerTube

View File

@ -1 +1 @@
O TubeLab é uma aplicação Peertube para instâncias acadêmicas. App for all Peertube instances

View File

@ -1 +1 @@
TubeLab est une application Peertube pour les instances académiques. App for all Peertube instances

View File

@ -15,7 +15,7 @@
- Загружать/удалять/редактировать видео - Загружать/удалять/редактировать видео
- Управлять (создание/редактирование/удаление) каналами и плейлистами - Управлять (создание/редактирование/удаление) каналами и плейлистами
- Подписаться/отписаться от каналов - Подписаться/отписаться от каналов
- Палец вверх/вниз - Нравится/не нравится
- Проверить уведомления - Проверить уведомления
- Отключить/включить каналы - Отключить/включить каналы
- Пожаловаться на видео/аккаунты - Пожаловаться на видео/аккаунты

View File

@ -1 +1 @@
TubeLab - это приложение Peertube для образовательных экземпляров. Приложение для всех серверов Peertube

View File

@ -1 +1 @@
TubeLab est une application Peertube pour les instances académiques. App for all Peertube instances

View File

@ -1,22 +1,22 @@
*Not authenticated mode* *游客模式*
It's a limited mode where you can do some actions: 此种受限模式下,您只能进行进行部分操作:
- Switch instance, • 切换实例
- Share videos, • 分享视频
- Download videos. • 下载视频
*Authenticated mode* *登录模式*
Many features are available with this mode: 此模式下允许您使用更多的功能:
- Write/delete comments • 发布 / 删除评论
- Upload/remove/edit videos • 上传 / 删除 / 编辑视频
- Manage (create/edit/remove) channels and playlists • 创建 / 编辑 / 删除频道与播放列表
- Follow/unfollow channels • 订阅 / 取消订阅频道
- Thumbs-up/down • 好评/差评
- Check notifications • 接收通知
- Mute/unmute channels • 隐藏/取消隐藏 频道
- Report videos/accounts • 报告视频 / 账号
- Check your history • 查看观看历史

View File

@ -1 +1 @@
TubeLab est une application Peertube pour les instances académiques. 此应用适用于所有Peertube实例

View File

@ -1 +1 @@
TubeLab est une application Peertube pour les instances académiques. App for all Peertube instances

View File

@ -1,5 +1,14 @@
- Force landscape view when switching in full screen Added:
- Sync languages with the instance - Display follow button for Sepia Search
- Change default cache for videos (settings) - Reach owner from channels
- Set default resolution for videos (settings) - Surfing mode (store instances in db with quick switch)
- Some bug fixes. - Allow to delete history
Changed:
- Quicker access to account settings
- Improve landscape mode
Fix:
- Pull to refresh crashes
- Settings crashes
- Fix an issue with unlisted playlists

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/colorAccent_full" android:state_checked="true" /> <item android:color="@color/colorAccent" android:state_checked="true" />
<item android:color="@android:color/tab_indicator_text" /> <item android:color="@android:color/tab_indicator_text" />
</selector> </selector>

View File

@ -1,198 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="title_home">Home</string>
<string name="title_discover">Discover</string>
<string name="title_notifications">Notifications</string>
<string name="title_recently_added">Recently added</string>
<string name="title_trending">Trending</string>
<string name="title_most_liked">Most liked</string>
<string name="toast_error">Oops! An error occurred!</string>
<string name="title_muted">Muted</string>
<string name="title_channel">Channels</string>
<string name="do_not_list">Do not list</string>
<string name="blur">Blur</string>
<string name="display">Display</string>
<string name="no_opinion">No opinion</string>
<string name="instance_choice">Pickup an instance</string>
<string name="not_valide_instance">This instance does not seem to be valid!</string>
<string name="no_videos">No videos!</string>
<string name="favicon">Favicon</string>
<string name="open_with">Open with</string>
<string name="action_playlist_edit">Edit a playlist</string>
<string name="close">Close</string>
<string name="upload_video">Upload</string>
<string name="image_preview">Image preview</string>
<string name="file_to_upload">Select the file to upload</string>
<string name="channel">Channel</string>
<string name="videos">Videos</string>
<string name="channels">Channels</string>
<string name="yes">Yes</string>
<string name="no">No</string>
<string name="cancel">Cancel</string>
<string name="download">Download</string>
<string name="profile_picture">Profile picture</string>
<string name="update_video">Update video</string>
<string name="date_seconds">%d s</string>
<string name="date_minutes">%d m</string>
<string name="date_hours">%d h</string>
<string name="date_day">%d d</string>
<string name="number_view_video">%s views</string>
<string name="title_instance_login">Instance host</string>
<string name="uploading">Uploading, please wait…</string>
<string name="upload_video_success">The video has been uploaded!</string>
<string name="toast_cancelled">Upload cancelled!</string>
<string name="video_uploaded_action">Tap here to edit the video data.</string>
<string name="toot_select_image_error">An error occurred while selecting the media!</string>
<string name="download_file">Download %1$s</string>
<string name="action_privacy">Privacy</string>
<string name="action_logout">Logout</string>
<string name="login">Login</string>
<string name="password">Password</string>
<string name="email">Email</string>
<string name="tags">Tags</string>
<string name="validate">Validate</string>
<string name="share_with">Share with</string>
<string name="shared_via">Shared via TubeLab</string>
<string name="username">User name</string>
<string name="settings">Settings</string>
<string name="logout_account_confirmation">Are you sure you want to logout @%1$s@%2$s?</string>
<string name="following">Following</string>
<string name="followers">Followers</string>
<string name="client_error">Unable to get client id!</string>
<string name="toast_error_loading_account">An error occurred while switching between accounts!</string>
<string name="toast_error_search">An error occurred while searching!</string>
<string name="nothing_to_do">No action can be taken</string>
<string name="action_follow">Follow</string>
<string name="action_mute">Mute</string>
<string name="search">Search</string>
<string name="delete">Delete</string>
<string name="action_lists_confirm_delete">Are you sure you want to permanently delete this list?</string>
<string name="action_lists_delete">Delete list</string>
<string name="no_comments">Be the first to leave a comment on this video with the top right button!</string>
<string name="comment_no_allowed_peertube">Comments are not enabled on this video!</string>
<string name="pickup_resolution">Pick up a resolution</string>
<string name="bookmark_add_peertube">The video has been added to bookmarks!</string>
<string name="bookmark_remove_peertube">The video has been removed from bookmarks!</string>
<string name="information" tools:ignore="UnusedResources">Information</string>
<string name="app_logo">Logo of the application</string>
<!-- languages not translated -->
<string name="subscriptions">Subscriptions</string>
<string name="delete_comment">Delete a comment</string>
<string name="delete_comment_confirm">Are you sure to delete this comment?</string>
<string name="set_video_mode">Mode for videos</string>
<string name="my_videos">My videos</string>
<string name="title">Title</string>
<string name="license">License</string>
<string name="category">Category</string>
<string name="language">Language</string>
<string name="peertube_nsfw">This video contains mature or explicit content</string>
<string name="peertube_enable_comments">Enable video comments</string>
<string name="description">Description</string>
<string name="toast_peertube_video_updated">The video has been updated!</string>
<string name="register_account">Register an account</string>
<string name="email_address">Email address</string>
<string name="preview">Preview</string>
<string name="change_preview">Change preview</string>
<string name="name">Name</string>
<string name="display_more">Display more</string>
<string name="no_channels">No channels!</string>
<string name="report_helper">Some explanations about your report…</string>
<string name="report_video">Report video</string>
<string name="report">Report</string>
<string name="change_instance">Pickup another instance</string>
<string name="my_history">History</string>
<string name="edit">Edit</string>
<string name="set_video_mode_description">Allows to change mode for playing videos (default, streaming or via a browser).</string>
<string name="delete_video">Delete video</string>
<string name="delete_video_confirmation">Are you sure to delete this video?</string>
<string name="no_video_to_display">No videos to display!</string>
<string name="share">Share</string>
<string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> commented your video <b>%2$s</b>]]></string>
<string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> is following your channel <b>%2$s</b>]]></string>
<string name="peertube_follow_account"><![CDATA[<b>%1$s</b> is following your account]]></string>
<string name="peertube_video_published"><![CDATA[Your video <b>%1$s</b> has been published]]></string>
<string name="peertube_video_import_success"><![CDATA[Your video import <b>%1$s</b> succeeded]]></string>
<string name="peertube_video_import_error"><![CDATA[Your video import <b>%1$s</b> failed]]></string>
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> published a new video: <b>%2$s</b>]]></string>
<string name="peertube_video_blacklist"><![CDATA[Your video <b>%1$s</b> has been blacklisted]]></string>
<string name="peertube_video_unblacklist"><![CDATA[Your video <b>%1$s</b> has been unblacklisted]]></string>
<string name="add_public_comment">Add a public comment</string>
<string name="send_comment">Send comment</string>
<string name="all">All</string>
<!-- end languages -->
<string name="playlists">Playlists</string>
<string name="display_name">Display name</string>
<string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string>
<string name="error_display_name">You must provide a display name!</string>
<string name="error_channel_mandatory">The channel is required when the playlist is public.</string>
<string name="action_playlist_create">Create a playlist</string>
<string name="action_playlist_empty_content">There is nothing in this playlist yet.</string>
<string name="password_confirm">Confirm password</string>
<string name="agreement_check">I agree to %1$s and %2$s</string>
<string name="server_rules">server rules</string>
<string name="tos">terms of service</string>
<string name="sign_up">Sign up</string>
<string name="all_field_filled">Please, fill all the fields!</string>
<string name="password_error">Passwords don\'t match!</string>
<string name="email_error">The email doesn\'t seem to be valid!</string>
<string name="email_indicator">You will be sent a confirmation e-mail</string>
<string name="password_indicator">Use at least 8 characters</string>
<string name="password_too_short">Password should contain at least 8 characters</string>
<string name="username_error">Username should only contain letters, numbers and underscores</string>
<string name="account_created">Account created!</string>
<string name="account_created_message"> Your account has been created!\n\n
Think to validate your email within the 48 next hours.\n\n
You can now connect your account by writing <b>%1$s</b> in the first field and tap on <b>Connect</b>.\n\n
<b>Important</b>: If your instance required validation, you will receive an email once it is validated!
</string>
<string name="account">Account</string>
<string name="report_account">Report account</string>
<string-array name="settings_video_mode">
<item>Webview</item>
<item>Direct stream</item>
</string-array>
<string name="unfollow_confirm">Do you want to unfollow this account?</string>
<string name="title_video_peertube">Title for the video</string>
<string name="join_peertube">Join Peertube</string>
<string name="agreement_check_peertube">I am at least 16 years old and agree to the %1$s of this instance</string>
<string name="edit_profile">Edit profile</string>
<string name="make_an_action">Make an action</string>
<string name="action_unfollow">Unfollow</string>
<string name="display_nsfw_videos">Display sensitive videos</string>
<string name="fullscreen">Fullscreen</string>
<string name="bookmark_peertube_empty">There are no videos in your favourites!</string>
<string name="delete_channel">Remove channel</string>
<string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string>
<string name="no_muted">No muted accounts!</string>
<string name="error_display_name_channel">You must define a name and a display name for this channel!</string>
<string name="action_channel_create">Create a channel</string>
<string name="action_channel_edit">Edit channel</string>
<string name="email_error_domain">Email addresses in %1$s are not allowed!</string>
<string name="report_comment_size">Please, specify the reasons</string>
<string name="not_logged_in">You must be authenticated to proceed to this action!</string>
<string name="successful_report">The account has been reported!</string>
<string name="successful_video_report">The video has been reported!</string>
<string name="password_length_error">The password must contain at least 6 characters!</string>
<string name="muted_done">The account has been muted!</string>
<string name="edit_video">Edit video</string>
<string name="create_an_account">Create an account</string>
<string name="followers_count">%1$s Subscribers</string>
<string name="developer">Developer</string>
<string name="about_vesrion">Release %1$s</string>
<string name="about_the_app">About the app</string>
<string name="Donate">Donate</string>
<string name="source_code">Source code</string>
<string name="issue_tracker">Issue tracker</string>
<string name="action_instance_empty_content">No instances match these criteria</string>
<string name="instances_picker">Instances picker</string>
<string name="pickup_instance">Pickup this instance</string>
<string name="sensitive_video"> Sensitive videos</string>
<string name="sensitive_content">Sensitive content: %1$s</string>
<string name="followers_instance">%1$s followers instances</string>
<string name="help">Help</string>
<string name="pickup_categories">Pickup categories</string>
<string name="pickup_languages">Pickup languages</string>
<string name="notification_channel_name">Update information</string>
<string name="add_account">Add an account</string>
<string name="list_of_accounts">List of accounts</string>
</resources>

View File

@ -1,15 +1,55 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"> <resources xmlns:tools="http://schemas.android.com/tools">
<string name="title_home">Home</string> <string name="set_video_in_list">Videos in list</string>
<string name="title_local">Local</string> <string name="set_video_in_list_description">Change the layout for displaying videos in a list</string>
<string name="no_instances">No instances !</string>
<string name="show_more">Show more</string>
<string name="show_less">Show less</string>
<string name="set_play_screen_lock">Screen lock</string>
<string name="set_play_screen_lock_description">Keep playing videos when the screen is locked</string>
<string name="save">Save</string>
<string name="enable_history">Enable history</string>
<string name="change_profile_picture">Change profile picture</string>
<string name="set_autoplay">Automatic playback</string>
<string name="set_autoplay_description">If enabled, videos will be played automatically</string>
<string name="set_fullscreen">Fullscreen</string>
<string name="set_fullscreen_description">Automatically open videos in fullscreen</string>
<string name="set_autoplay_next_video">Automatically start playing the next video</string>
<string name="set_autoplay_next_video_description">When a video ends, follow up with the next suggested video.</string>
<string name="add_public_reply">Add a public reply</string>
<string name="activity">Activity</string>
<string name="app">App</string>
<string name="notif_new_video">New video from your subscriptions</string>
<string name="notif_new_comment">New comment on your video</string>
<string name="notif_blocked">One of your video is blocked/unblocked</string>
<string name="notif_video_published">Video published (after transcoding/scheduled update)</string>
<string name="notif_video_imported">Video import finished</string>
<string name="notif_new_followers">You or your channel(s) has a new follower</string>
<string name="notif_video_mention">Someone mentioned you in video comments</string>
<string name="notif_abuse_received">An abuse report received a new message</string>
<string name="notif_abuse_accepted">One of your abuse reports has been accepted or rejected by moderators</string>
<plurals name="number_of_replies">
<item quantity="zero">%d ردود</item>
<item quantity="one">ردّ واحد %d</item>
<item quantity="two">%d ردود</item>
<item quantity="few">%d ردود</item>
<item quantity="many">%d ردود</item>
<item quantity="other">%d ردود</item>
</plurals>
<string name="reply">رد</string>
<string name="set_theme">السمة</string>
<string name="set_theme_description">Allow to change app theme</string>
<string name="federation_issue">The video cannot be federated!</string>
<string name="title_home">الرئيسية</string>
<string name="title_local">المحلية</string>
<string name="title_discover">Discover</string> <string name="title_discover">Discover</string>
<string name="title_notifications">Notifications</string> <string name="title_notifications">الإشعارات</string>
<string name="title_recently_added">Recently added</string> <string name="title_recently_added">تم إضافتها حديثًا</string>
<string name="title_trending">Trending</string> <string name="title_trending">الشائعة</string>
<string name="title_most_liked">Most liked</string> <string name="title_most_liked">Most liked</string>
<string name="toast_error">Oops! An error occurred!</string> <string name="toast_error">Oops! An error occurred!</string>
<string name="title_muted">Muted</string> <string name="title_muted">Muted</string>
<string name="title_channel">Channels</string> <string name="title_channel">القنوات</string>
<string name="do_not_list">Do not list</string> <string name="do_not_list">Do not list</string>
<string name="blur">Blur</string> <string name="blur">Blur</string>
<string name="display">Display</string> <string name="display">Display</string>
@ -18,96 +58,143 @@
<string name="not_valide_instance">This instance does not seem to be valid!</string> <string name="not_valide_instance">This instance does not seem to be valid!</string>
<string name="no_videos">No videos!</string> <string name="no_videos">No videos!</string>
<string name="no_notifications">No notifications!</string> <string name="no_notifications">No notifications!</string>
<string name="favicon">Favicon</string> <string name="favicon">أيقونة المفضلة</string>
<string name="open_with">Open with</string> <string name="open_with">فتح بواسطة</string>
<string name="action_playlist_edit">Edit a playlist</string> <string name="action_playlist_edit">Edit a playlist</string>
<string name="close">Close</string> <string name="close">أغلق</string>
<string name="upload_video">Upload</string> <string name="upload_video">إرسال</string>
<string name="image_preview">Image preview</string> <string name="image_preview">معاينة الصورة</string>
<string name="file_to_upload">Select the file to upload</string> <string name="file_to_upload">اختر الملف المراد ارساله</string>
<string name="channel">Channel</string> <string name="new_video">New video</string>
<string name="videos">Videos</string> <string name="new_blacklist">New blacklist info</string>
<string name="channels">Channels</string> <string name="new_my_video_published">Your video is published</string>
<string name="yes">Yes</string> <string name="new_my_video_error">Error when publishing your video</string>
<string name="no">No</string> <string name="new_comment">New comment</string>
<string name="cancel">Cancel</string> <string name="new_follow">New follow</string>
<string name="download">Download</string> <string name="channel">قناة</string>
<string name="profile_picture">Profile picture</string> <string name="videos">الفيديوهات</string>
<string name="update_video">Update video</string> <string name="channels">القنوات</string>
<string name="date_seconds">%d s</string> <string name="refresh_every">Fetch every:</string>
<string name="date_minutes">%d m</string> <string-array name="refresh_time">
<string name="date_hours">%d h</string> <item>Never</item>
<string name="date_day">%d d</string> <item>15 minutes</item>
<string name="number_view_video">%s views</string> <item>30 minutes</item>
<item>1 hour</item>
<item>2 hours</item>
<item>6 hours</item>
<item>12 hours</item>
</string-array>
<string name="yes">موافق</string>
<string name="no">لا</string>
<string name="cancel">إلغاء</string>
<string name="download">تنزيل</string>
<string name="profile_picture">الصورة الشخصية</string>
<string name="update_video">تحديث الفيديو</string>
<string name="remove_from_playlist">Remove from playlist</string>
<string name="date_seconds">%d ثا</string>
<string name="date_minutes">%d د</string>
<string name="date_hours">%d سا</string>
<string name="date_day">%d يو</string>
<string name="number_view_video">%s مشاهدات</string>
<string name="title_instance_login">Instance host</string> <string name="title_instance_login">Instance host</string>
<string name="uploading">Uploading, please wait</string> <string name="uploading">الارسال جارٍ، يُرجى الانتظار</string>
<string name="upload_video_success">The video has been uploaded!</string> <string name="upload_video_success">تم ارسال الفيديو!</string>
<string name="toast_cancelled">Upload cancelled!</string> <string name="toast_cancelled">تم إلغاء الإرسال!</string>
<string name="video_uploaded_action">Tap here to edit the video data.</string> <string name="video_uploaded_action">Tap here to edit the video data.</string>
<string name="toot_select_image_error">An error occurred while selecting the media!</string> <string name="toot_select_image_error">طرأ هناك خطأ أثناء اختيار الوسائط!</string>
<string name="download_file">Download %1$s</string> <string name="download_file">تنزيل %1$s</string>
<string name="action_privacy">Privacy</string> <string name="account_updated">The account has been updated!</string>
<string name="action_logout">Logout</string> <string name="action_privacy">الخصوصية</string>
<string name="login">Login</string> <string name="action_logout">تسجيل الخروج</string>
<string name="password">Password</string> <string name="login">تسجيل الدخول</string>
<string name="email">Email</string> <string name="password">كلمة السر</string>
<string name="tags">Tags</string> <string name="email">البريد الإلكتروني</string>
<string name="validate">Validate</string> <string name="tags">الوسوم</string>
<string name="share_with">Share with</string> <string name="validate">موافق</string>
<string name="share_with">شارك بواسطة</string>
<string name="shared_via">Shared via TubeLab</string> <string name="shared_via">Shared via TubeLab</string>
<string name="username">User name</string> <string name="username">اسم المستخدم</string>
<string name="settings">Settings</string> <string name="settings">الإعدادات</string>
<string name="logout_account_confirmation">Are you sure you want to logout @%1$s@%2$s?</string> <string name="logout_account_confirmation">هل أنت متأكد من أنك تريد تسجيل الخروج @%1$s@%2$s؟</string>
<string name="following">Following</string> <string name="following">يتابِع</string>
<string name="followers">Followers</string> <string name="followers">المتابِعون</string>
<string name="client_error">Unable to get client id!</string> <string name="client_error">تعذرت عملية جلب معرف العميل!</string>
<string name="toast_error_loading_account">An error occurred while switching between accounts!</string> <string name="toast_error_loading_account">طرأ هناك خطأ أثناء التحوّل مِن حساب إلى آخر!</string>
<string name="toast_error_search">An error occurred while searching!</string> <string name="toast_error_search">وقع خطأ أثناء عملية البحث!</string>
<string name="nothing_to_do">No action can be taken</string> <string name="nothing_to_do">لا يمكن اتخاذ أي إجراء</string>
<string name="action_follow">Follow</string> <string name="action_follow">اتبع</string>
<string name="action_mute">Mute</string> <string name="action_mute">كتم</string>
<string name="search">Search</string> <string name="search">البحث</string>
<string name="delete">Delete</string> <string name="delete">حذف</string>
<string name="action_lists_confirm_delete">Are you sure you want to permanently delete this list?</string> <string name="action_lists_confirm_delete">هل تود فعلا حذف هذه القائمة ؟</string>
<string name="action_lists_delete">Delete list</string> <string name="action_lists_delete">حذف القائمة</string>
<string name="no_comments">Be the first to leave a comment on this video with the top right button!</string> <string name="no_comments">كن الأول في التعليق على هذا الفيديو بالضغط على الزر الأيمن في الأعلى!</string>
<string name="comment_no_allowed_peertube">Comments are not enabled on this video!</string> <string name="comment_no_allowed_peertube">إنّ التعليقات على هذا الفيديو مُعطّلة!</string>
<string name="pickup_resolution">Pick up a resolution</string> <string name="pickup_resolution">اختيار الجودة</string>
<string name="bookmark_add_peertube">The video has been added to bookmarks!</string> <string name="bookmark_add_peertube">تم إضافة الفيديو إلى الفواصل المرجعية!</string>
<string name="bookmark_remove_peertube">The video has been removed from bookmarks!</string> <string name="bookmark_remove_peertube">تم إزالة الفيديو من الفواصل المرجعية!</string>
<string name="information" tools:ignore="UnusedResources">Information</string> <string name="information" tools:ignore="UnusedResources">معلومات</string>
<string name="app_logo">Logo of the application</string> <string name="app_logo">شعار التطبيق</string>
<!-- languages not translated --> <!-- languages not translated -->
<string name="subscriptions">Subscriptions</string> <string name="subscriptions">الاشتراكات</string>
<string name="delete_comment">Delete a comment</string> <string name="delete_instance">Delete an instance</string>
<string name="delete_comment_confirm">Are you sure to delete this comment?</string> <string name="delete_instance_confirm">Are you sure to delete this instance?</string>
<string name="set_video_mode">Mode for videos</string> <string name="delete_comment">حذف التعليق</string>
<string name="my_videos">My videos</string> <string name="delete_comment_confirm">هل أنت متأكد من أنك تود حذف هذا التعليق؟</string>
<string name="title">Title</string> <string name="set_video_mode">أسلوب عرض الفيديوهات</string>
<string name="license">License</string> <string name="filter">عامل التصفية</string>
<string name="category">Category</string> <string name="sepia_search">Sepia search</string>
<string name="language">Language</string> <string name="sepia_element_nsfw">Display sensitive content</string>
<string name="peertube_nsfw">This video contains mature or explicit content</string> <string name="sepia_element_published_date">Published date</string>
<string name="peertube_enable_comments">Enable video comments</string> <string name="any">Any</string>
<string name="description">Description</string> <string name="today">Today</string>
<string name="toast_peertube_video_updated">The video has been updated!</string> <string name="last_7_days">Last 7 days</string>
<string name="last_30_days">Last 30 days</string>
<string name="last_365_days">Last 365 days</string>
<string name="sepia_element_duration">Duration</string>
<string name="duration_short"><![CDATA[Short (<4 min)]]></string>
<string name="duration_medium"><![CDATA[Medium (410 min)]]></string>
<string name="duration_long"><![CDATA[Long (> 10 min)]]></string>
<string name="display_all_categories">Display all categories</string>
<string name="display_all_licenses">Display all licenses</string>
<string name="display_all_languages">Display all languages</string>
<string name="all_of_these_tags">All of these tags</string>
<string name="one_of_these_tags">One of these tags</string>
<string name="apply_filter">Apply filter</string>
<string-array name="sort_by_array">
<item>Best match</item>
<item>Most recent</item>
<item>Least recent</item>
</string-array>
<string name="sort_by">Sort by</string>
<string name="sepia_search_hint">Keyword, channel, video, etc.</string>
<string name="sepia_indication">Sepia Search displays videos and channels that match your search but is not the publisher, nor the owner. If you notice any problems with a video, report it to the administrators on the PeerTube website where the video is published.</string>
<string name="my_videos">فيديوهاتي</string>
<string name="title">العنوان</string>
<string name="license">الرخصة</string>
<string name="category">الفئة</string>
<string name="language">اللغة</string>
<string name="peertube_nsfw">هذه الفيديو تحتوي على محتوى للكبار</string>
<string name="peertube_enable_comments">السماح بالتعليق على الفيديو</string>
<string name="description">الوصف</string>
<string name="toast_peertube_video_updated">تم تحديث الفيديو!</string>
<string name="register_account">Register an account</string> <string name="register_account">Register an account</string>
<string name="email_address">Email address</string> <string name="email_address">Email address</string>
<string name="preview">Preview</string> <string name="preview">Preview</string>
<string name="change_preview">Change preview</string> <string name="change_preview">Change preview</string>
<string name="name">Name</string> <string name="name">Name</string>
<string name="display_more">Display more</string> <string name="display_more">عرض المزيد</string>
<string name="no_channels">No channels!</string> <string name="no_channels">No channels!</string>
<string name="report_helper">Some explanations about your report…</string> <string name="report_helper">Some explanations about your report…</string>
<string name="report_video">Report video</string> <string name="report_video">Report video</string>
<string name="report">Report</string> <string name="report">الإبلاغ</string>
<string name="change_instance">Pick another instance</string> <string name="change_instance">Pick another instance</string>
<string name="my_history">History</string> <string name="my_history">التاريخ</string>
<string name="edit">Edit</string> <string name="edit">تعديل</string>
<string name="video_settings">Video settings</string> <string name="video_settings">Video settings</string>
<string name="app_interface">Interface</string> <string name="app_interface">الواجهة</string>
<string name="set_cache_mode">Cache</string> <string name="set_cache_mode">الذاكرة المؤقتة</string>
<string name="set_video_cache_description">Définir le cache pour les vidéos (défaut 100Mo)</string> <string name="set_video_cache_description">Set the cache for videos (default 100Mb)</string>
<string name="set_video_quality_description">Define a default quality for videos</string> <string name="set_video_quality_description">Define a default quality for videos</string>
<string name="set_quality_mode">Resolution for videos</string> <string name="set_quality_mode">Resolution for videos</string>
<string name="video_cache_value">Video cache: %d Mb</string> <string name="video_cache_value">Video cache: %d Mb</string>
@ -115,72 +202,92 @@
<string name="pickup_captions">Pick captions</string> <string name="pickup_captions">Pick captions</string>
<string name="none">None</string> <string name="none">None</string>
<string name="set_video_mode_description">Allows to change mode for playing videos (default, streaming or via a browser).</string> <string name="set_video_mode_description">Allows to change mode for playing videos (default, streaming or via a browser).</string>
<string name="delete_video">Delete video</string> <string name="delete_account_comment">Delete account comments</string>
<string name="delete_video_confirmation">Are you sure to delete this video?</string> <string name="delete_account_comment_confirm">Are you sure you want to remove all the comments of this account?</string>
<string name="no_video_to_display">No videos to display!</string> <string name="delete_video">احذف الفيديو</string>
<string name="share">Share</string> <string name="delete_video_confirmation">هل أنت متأكد أنك تود حذف هذا الفيديو؟</string>
<string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> commented your video <b>%2$s</b>]]></string> <string name="no_video_to_display">لا توجد أية فيديوهات لعرضها!</string>
<string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> is following your channel <b>%2$s</b>]]></string> <string name="share">شارك</string>
<string name="peertube_follow_account"><![CDATA[<b>%1$s</b> is following your account]]></string> <string name="peertube_comment_on_video"><![CDATA[علّق <b>%1$s</b> على الفيديو <b>%2$s</b>]]></string>
<string name="peertube_video_published"><![CDATA[Your video <b>%1$s</b> has been published]]></string> <string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> يتابع قناتك <b>%2$s</b> الآن]]></string>
<string name="peertube_video_import_success"><![CDATA[Your video import <b>%1$s</b> succeeded]]></string> <string name="peertube_follow_account"><![CDATA[<b>%1$s</b> يُتابِع حسابك الآن]]></string>
<string name="peertube_video_import_error"><![CDATA[Your video import <b>%1$s</b> failed]]></string> <string name="peertube_video_published"><![CDATA[تم نشر الفيديو <b>%1$s</b>]]></string>
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> published a new video: <b>%2$s</b>]]></string> <string name="peertube_video_import_success"><![CDATA[تم استيراد الفيديو <b>%1$s</b> بنجاح]]></string>
<string name="peertube_video_blacklist"><![CDATA[Your video <b>%1$s</b> has been blacklisted]]></string> <string name="peertube_video_import_error"><![CDATA[فشلت عملية استيراد الفيديو <b>%1$s</b>]]></string>
<string name="peertube_video_unblacklist"><![CDATA[Your video <b>%1$s</b> has been unblacklisted]]></string> <string name="peertube_video_from_subscription"><![CDATA[لقد نشر <b>%1$s</b> فيديو جديد: <b>%2$s</b>]]></string>
<string name="peertube_video_blacklist"><![CDATA[تم درج الفيديو الخاص بك <b>%1$s</b> في القائمة السوداء]]></string>
<string name="peertube_video_unblacklist"><![CDATA[تم حذف الفيديو الخاص بك <b>%1$s</b> من القائمة السوداء]]></string>
<string name="peertube_video_report_success"><![CDATA[Your abuse report <b>%1$s</b> has been accepted]]></string>
<string name="peertube_video_abuse"><![CDATA[New abuse report for video: <b>%1$s</b>]]></string> <string name="peertube_video_abuse"><![CDATA[New abuse report for video: <b>%1$s</b>]]></string>
<string name="add_public_comment">Add a public comment</string> <string name="add_public_comment">أضف تعليقًا عامًا</string>
<string name="send_comment">Send comment</string> <string name="send_comment">ارسل تعليق</string>
<string name="all">All</string> <string name="all">الكل</string>
<!-- end languages --> <!-- end languages -->
<string name="playlists">Playlists</string> <string name="delete_history">Delete videos history</string>
<string name="display_name">Display name</string> <string name="delete_history_confirm">Are you sure you want to delete all your videos history?</string>
<string name="export_list">Export</string>
<string name="import_list">Import</string>
<string name="export_notification_title">Successful export!</string>
<string name="export_notification_content">Tap here to send the export by email</string>
<string name="export_notification_subjet">New Playlist</string>
<string name="export_notification_body">Open the attached file with TubeLab</string>
<string name="playlists">قوائم التشغيل</string>
<string name="no_playlist">No playlists</string>
<string name="display_name">الاسم العلني</string>
<string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string> <string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string>
<string name="error_display_name">You must provide a display name!</string> <string name="error_display_name">يجب عليك إدخال اسم علني!</string>
<string name="error_channel_mandatory">The channel is required when the playlist is public.</string> <string name="error_channel_mandatory">القناة لازمة إن كانت قائمة التشغيل متاحة للعامة.</string>
<string name="action_playlist_create">Create a playlist</string> <string name="action_playlist_create">إنشاء قائمة تشغيل</string>
<string name="action_playlist_empty_content">There is nothing in this playlist yet.</string> <string name="action_playlist_empty_content">قائمة التشغيل هذه فارغة حاليا.</string>
<string name="password_confirm">Confirm password</string> <string name="password_confirm">تأكيد الكلمة السرية</string>
<string name="agreement_check">I agree to %1$s and %2$s</string> <string name="agreement_check">أوافق على %1$s وعلى %2$s</string>
<string name="server_rules">server rules</string> <string name="server_rules">قواعد الخادم</string>
<string name="tos">terms of service</string> <string name="tos">شروط الخدمة</string>
<string name="sign_up">Sign up</string> <string name="sign_up">إنشاء حساب</string>
<string name="all_field_filled">Please, fill all the fields!</string> <string name="all_field_filled">يرجى ملء جميع الحقول!</string>
<string name="password_error">Passwords don\'t match!</string> <string name="password_error">كلمتي المرور غير متطابقتين!</string>
<string name="email_error">The email doesn\'t seem to be valid!</string> <string name="email_error">يبدو أنّ عنوان البريد الإلكتروني غير صالح!</string>
<string name="email_indicator">You will be sent a confirmation e-mail</string> <string name="email_indicator">سيتم إرسال رسالة إلكترونية للتأكيد</string>
<string name="password_indicator">Use at least 8 characters</string> <string name="password_indicator">استخدم 8 أحرف على الأقل</string>
<string name="password_too_short">Password should contain at least 8 characters</string> <string name="password_too_short">يجب أن تكون الكلمة السرية مكوّنة مِن 8 أحرف على الأقل</string>
<string name="username_error">Username should only contain letters, numbers and underscores</string> <string name="username_error">اسم المستخدم يجب أن تحتوي فقط على حروف وأرقام وسطور سفلية</string>
<string name="account_created">Account created!</string> <string name="account_created">تم إنشاء الحساب!</string>
<string name="account_created_message"> Your account has been created!\n\n <string name="account_created_message"> Your account has been created!\n\n
Think to validate your email within the 48 next hours.\n\n Think to validate your email within the 48 next hours.\n\n
You can now connect your account by writing <b>%1$s</b> in the first field and tap on <b>Connect</b>.\n\n You can now connect your account by writing <b>%1$s</b> in the first field and tap on <b>Connect</b>.\n\n
<b>Important</b>: If your instance required validation, you will receive an email once it is validated! <b>Important</b>: If your instance required validation, you will receive an email once it is validated!
</string> </string>
<string name="account">Account</string> <string name="account">الحساب</string>
<string name="report_account">Report account</string> <string name="report_account">بلّغ عن الحساب</string>
<string-array name="settings_video_mode"> <string-array name="settings_video_mode">
<item>عادي</item>
<item>Webview</item> <item>Webview</item>
<item>Direct stream</item> <item>Magnet</item>
<item>Torrent</item>
</string-array>
<string-array name="settings_theme">
<item>فاتحة</item>
<item>مظلمة</item>
<item>Automatic</item>
</string-array> </string-array>
<string-array name="settings_video_quality"> <string-array name="settings_video_quality">
<item>High</item> <item>High</item>
<item>Medium</item> <item>Medium</item>
<item>Low</item> <item>Low</item>
</string-array> </string-array>
<string name="unfollow_confirm">Do you want to unfollow this account?</string> <string name="unfollow_confirm">هل تريد إلغاء متابعة هذا الحساب؟</string>
<string name="title_video_peertube">Title for the video</string> <string name="title_video_peertube">عنوان للفيديو</string>
<string name="join_peertube">Join Peertube</string> <string name="join_peertube">انظم إلى PeerTube</string>
<string name="agreement_check_peertube">I am at least 16 years old and agree to the %1$s of this instance</string> <string name="agreement_check_peertube">أبلُغ مِن العُمر 16 سنة على الأقل وأوافق على %1$s هذا الخادم</string>
<string name="edit_profile">Edit profile</string> <string name="edit_profile">عدّل الصفحة التعريفية</string>
<string name="make_an_action">Make an action</string> <string name="make_an_action">القيام بإجراء</string>
<string name="action_unfollow">Unfollow</string> <string name="action_unfollow">إلغاء المتابعة</string>
<string name="display_nsfw_videos">Display sensitive videos</string> <string name="display_nsfw_videos">Display sensitive videos</string>
<string name="fullscreen">Fullscreen</string> <string name="fullscreen">Fullscreen</string>
<string name="bookmark_peertube_empty">There are no videos in your favourites!</string> <string name="bookmark_peertube_empty">There are no videos in your favourites!</string>
<string name="delete_channel">Remove channel</string> <string name="delete_channel">Remove channel</string>
<string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string> <string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string>
<string name="modify_playlists">Video in playlists</string>
<string name="no_muted">No muted accounts!</string> <string name="no_muted">No muted accounts!</string>
<string name="error_display_name_channel">You must define a name and a display name for this channel!</string> <string name="error_display_name_channel">You must define a name and a display name for this channel!</string>
<string name="action_channel_create">Create a channel</string> <string name="action_channel_create">Create a channel</string>
@ -196,23 +303,24 @@
<string name="edit_video">Edit video</string> <string name="edit_video">Edit video</string>
<string name="create_an_account">Create an account</string> <string name="create_an_account">Create an account</string>
<string name="followers_count">%1$s Subscribers</string> <string name="followers_count">%1$s Subscribers</string>
<string name="developer">Developer</string> <string name="developer">المُطوّر</string>
<string name="about_vesrion">Release %1$s</string> <string name="about_vesrion">الإصدار %1$s</string>
<string name="about_the_app">About the app</string> <string name="about_the_app">عن التطبيق</string>
<string name="Donate">Donate</string> <string name="Donate">تبرع</string>
<string name="source_code">Source code</string> <string name="source_code">الشفرة المصدرية</string>
<string name="issue_tracker">Issue tracker</string> <string name="issue_tracker">متعقب المشاكل</string>
<string name="action_instance_empty_content">No instances match these criteria</string> <string name="action_instance_empty_content">No instances match these criteria</string>
<string name="instances_picker">Instances picker</string> <string name="instances_picker">Instances picker</string>
<string name="pickup_instance">Pick this instance</string> <string name="pickup_instance">Pick this instance</string>
<string name="sensitive_video"> Sensitive videos</string> <string name="sensitive_video"> Sensitive videos</string>
<string name="sensitive_content">Sensitive content: %1$s</string> <string name="sensitive_content">Sensitive content: %1$s</string>
<string name="followers_instance">%1$s instance followers</string> <string name="followers_instance">%1$s instance followers</string>
<string name="help">Help</string> <string name="help">مساعدة</string>
<string name="pickup_categories">Pick categories</string> <string name="pickup_categories">Pick categories</string>
<string name="pickup_languages">Pick languages</string> <string name="pickup_languages">Pick languages</string>
<string name="notification_channel_name">Update information</string> <string name="notification_channel_name">Update information</string>
<string name="add_account">Add an account</string> <string name="fetch_notification_channel_name">Fetch notifications</string>
<string name="add_account">إضافة حساب</string>
<string name="list_of_accounts">List of accounts</string> <string name="list_of_accounts">List of accounts</string>
<string name="pause">Pause</string> <string name="pause">Pause</string>
<string name="play">Play</string> <string name="play">Play</string>

View File

@ -1,198 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="title_home">Home</string>
<string name="title_discover">Discover</string>
<string name="title_notifications">Notifications</string>
<string name="title_recently_added">Recently added</string>
<string name="title_trending">Trending</string>
<string name="title_most_liked">Most liked</string>
<string name="toast_error">Oops! An error occurred!</string>
<string name="title_muted">Muted</string>
<string name="title_channel">Channels</string>
<string name="do_not_list">Do not list</string>
<string name="blur">Blur</string>
<string name="display">Display</string>
<string name="no_opinion">No opinion</string>
<string name="instance_choice">Pickup an instance</string>
<string name="not_valide_instance">This instance does not seem to be valid!</string>
<string name="no_videos">No videos!</string>
<string name="favicon">Favicon</string>
<string name="open_with">Open with</string>
<string name="action_playlist_edit">Edit a playlist</string>
<string name="close">Close</string>
<string name="upload_video">Upload</string>
<string name="image_preview">Image preview</string>
<string name="file_to_upload">Select the file to upload</string>
<string name="channel">Channel</string>
<string name="videos">Videos</string>
<string name="channels">Channels</string>
<string name="yes">Yes</string>
<string name="no">No</string>
<string name="cancel">Cancel</string>
<string name="download">Download</string>
<string name="profile_picture">Profile picture</string>
<string name="update_video">Update video</string>
<string name="date_seconds">%d s</string>
<string name="date_minutes">%d m</string>
<string name="date_hours">%d h</string>
<string name="date_day">%d d</string>
<string name="number_view_video">%s views</string>
<string name="title_instance_login">Instance host</string>
<string name="uploading">Uploading, please wait…</string>
<string name="upload_video_success">The video has been uploaded!</string>
<string name="toast_cancelled">Upload cancelled!</string>
<string name="video_uploaded_action">Tap here to edit the video data.</string>
<string name="toot_select_image_error">An error occurred while selecting the media!</string>
<string name="download_file">Download %1$s</string>
<string name="action_privacy">Privacy</string>
<string name="action_logout">Logout</string>
<string name="login">Login</string>
<string name="password">Password</string>
<string name="email">Email</string>
<string name="tags">Tags</string>
<string name="validate">Validate</string>
<string name="share_with">Share with</string>
<string name="shared_via">Shared via TubeLab</string>
<string name="username">User name</string>
<string name="settings">Settings</string>
<string name="logout_account_confirmation">Are you sure you want to logout @%1$s@%2$s?</string>
<string name="following">Following</string>
<string name="followers">Followers</string>
<string name="client_error">Unable to get client id!</string>
<string name="toast_error_loading_account">An error occurred while switching between accounts!</string>
<string name="toast_error_search">An error occurred while searching!</string>
<string name="nothing_to_do">No action can be taken</string>
<string name="action_follow">Follow</string>
<string name="action_mute">Mute</string>
<string name="search">Search</string>
<string name="delete">Delete</string>
<string name="action_lists_confirm_delete">Are you sure you want to permanently delete this list?</string>
<string name="action_lists_delete">Delete list</string>
<string name="no_comments">Be the first to leave a comment on this video with the top right button!</string>
<string name="comment_no_allowed_peertube">Comments are not enabled on this video!</string>
<string name="pickup_resolution">Pick up a resolution</string>
<string name="bookmark_add_peertube">The video has been added to bookmarks!</string>
<string name="bookmark_remove_peertube">The video has been removed from bookmarks!</string>
<string name="information" tools:ignore="UnusedResources">Information</string>
<string name="app_logo">Logo of the application</string>
<!-- languages not translated -->
<string name="subscriptions">Subscriptions</string>
<string name="delete_comment">Delete a comment</string>
<string name="delete_comment_confirm">Are you sure to delete this comment?</string>
<string name="set_video_mode">Mode for videos</string>
<string name="my_videos">My videos</string>
<string name="title">Title</string>
<string name="license">License</string>
<string name="category">Category</string>
<string name="language">Language</string>
<string name="peertube_nsfw">This video contains mature or explicit content</string>
<string name="peertube_enable_comments">Enable video comments</string>
<string name="description">Description</string>
<string name="toast_peertube_video_updated">The video has been updated!</string>
<string name="register_account">Register an account</string>
<string name="email_address">Email address</string>
<string name="preview">Preview</string>
<string name="change_preview">Change preview</string>
<string name="name">Name</string>
<string name="display_more">Display more</string>
<string name="no_channels">No channels!</string>
<string name="report_helper">Some explanations about your report…</string>
<string name="report_video">Report video</string>
<string name="report">Report</string>
<string name="change_instance">Pickup another instance</string>
<string name="my_history">History</string>
<string name="edit">Edit</string>
<string name="set_video_mode_description">Allows to change mode for playing videos (default, streaming or via a browser).</string>
<string name="delete_video">Delete video</string>
<string name="delete_video_confirmation">Are you sure to delete this video?</string>
<string name="no_video_to_display">No videos to display!</string>
<string name="share">Share</string>
<string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> commented your video <b>%2$s</b>]]></string>
<string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> is following your channel <b>%2$s</b>]]></string>
<string name="peertube_follow_account"><![CDATA[<b>%1$s</b> is following your account]]></string>
<string name="peertube_video_published"><![CDATA[Your video <b>%1$s</b> has been published]]></string>
<string name="peertube_video_import_success"><![CDATA[Your video import <b>%1$s</b> succeeded]]></string>
<string name="peertube_video_import_error"><![CDATA[Your video import <b>%1$s</b> failed]]></string>
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> published a new video: <b>%2$s</b>]]></string>
<string name="peertube_video_blacklist"><![CDATA[Your video <b>%1$s</b> has been blacklisted]]></string>
<string name="peertube_video_unblacklist"><![CDATA[Your video <b>%1$s</b> has been unblacklisted]]></string>
<string name="add_public_comment">Add a public comment</string>
<string name="send_comment">Send comment</string>
<string name="all">All</string>
<!-- end languages -->
<string name="playlists">Playlists</string>
<string name="display_name">Display name</string>
<string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string>
<string name="error_display_name">You must provide a display name!</string>
<string name="error_channel_mandatory">The channel is required when the playlist is public.</string>
<string name="action_playlist_create">Create a playlist</string>
<string name="action_playlist_empty_content">There is nothing in this playlist yet.</string>
<string name="password_confirm">Confirm password</string>
<string name="agreement_check">I agree to %1$s and %2$s</string>
<string name="server_rules">server rules</string>
<string name="tos">terms of service</string>
<string name="sign_up">Sign up</string>
<string name="all_field_filled">Please, fill all the fields!</string>
<string name="password_error">Passwords don\'t match!</string>
<string name="email_error">The email doesn\'t seem to be valid!</string>
<string name="email_indicator">You will be sent a confirmation e-mail</string>
<string name="password_indicator">Use at least 8 characters</string>
<string name="password_too_short">Password should contain at least 8 characters</string>
<string name="username_error">Username should only contain letters, numbers and underscores</string>
<string name="account_created">Account created!</string>
<string name="account_created_message"> Your account has been created!\n\n
Think to validate your email within the 48 next hours.\n\n
You can now connect your account by writing <b>%1$s</b> in the first field and tap on <b>Connect</b>.\n\n
<b>Important</b>: If your instance required validation, you will receive an email once it is validated!
</string>
<string name="account">Account</string>
<string name="report_account">Report account</string>
<string-array name="settings_video_mode">
<item>Webview</item>
<item>Direct stream</item>
</string-array>
<string name="unfollow_confirm">Do you want to unfollow this account?</string>
<string name="title_video_peertube">Title for the video</string>
<string name="join_peertube">Join Peertube</string>
<string name="agreement_check_peertube">I am at least 16 years old and agree to the %1$s of this instance</string>
<string name="edit_profile">Edit profile</string>
<string name="make_an_action">Make an action</string>
<string name="action_unfollow">Unfollow</string>
<string name="display_nsfw_videos">Display sensitive videos</string>
<string name="fullscreen">Fullscreen</string>
<string name="bookmark_peertube_empty">There are no videos in your favourites!</string>
<string name="delete_channel">Remove channel</string>
<string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string>
<string name="no_muted">No muted accounts!</string>
<string name="error_display_name_channel">You must define a name and a display name for this channel!</string>
<string name="action_channel_create">Create a channel</string>
<string name="action_channel_edit">Edit channel</string>
<string name="email_error_domain">Email addresses in %1$s are not allowed!</string>
<string name="report_comment_size">Please, specify the reasons</string>
<string name="not_logged_in">You must be authenticated to proceed to this action!</string>
<string name="successful_report">The account has been reported!</string>
<string name="successful_video_report">The video has been reported!</string>
<string name="password_length_error">The password must contain at least 6 characters!</string>
<string name="muted_done">The account has been muted!</string>
<string name="edit_video">Edit video</string>
<string name="create_an_account">Create an account</string>
<string name="followers_count">%1$s Subscribers</string>
<string name="developer">Developer</string>
<string name="about_vesrion">Release %1$s</string>
<string name="about_the_app">About the app</string>
<string name="Donate">Donate</string>
<string name="source_code">Source code</string>
<string name="issue_tracker">Issue tracker</string>
<string name="action_instance_empty_content">No instances match these criteria</string>
<string name="instances_picker">Instances picker</string>
<string name="pickup_instance">Pickup this instance</string>
<string name="sensitive_video"> Sensitive videos</string>
<string name="sensitive_content">Sensitive content: %1$s</string>
<string name="followers_instance">%1$s followers instances</string>
<string name="help">Help</string>
<string name="pickup_categories">Pickup categories</string>
<string name="pickup_languages">Pickup languages</string>
<string name="notification_channel_name">Update information</string>
<string name="add_account">Add an account</string>
<string name="list_of_accounts">List of accounts</string>
</resources>

View File

@ -1,198 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="title_home">Home</string>
<string name="title_discover">Discover</string>
<string name="title_notifications">Notifications</string>
<string name="title_recently_added">Recently added</string>
<string name="title_trending">Trending</string>
<string name="title_most_liked">Most liked</string>
<string name="toast_error">Oops! An error occurred!</string>
<string name="title_muted">Muted</string>
<string name="title_channel">Channels</string>
<string name="do_not_list">Do not list</string>
<string name="blur">Blur</string>
<string name="display">Display</string>
<string name="no_opinion">No opinion</string>
<string name="instance_choice">Pickup an instance</string>
<string name="not_valide_instance">This instance does not seem to be valid!</string>
<string name="no_videos">No videos!</string>
<string name="favicon">Favicon</string>
<string name="open_with">Open with</string>
<string name="action_playlist_edit">Edit a playlist</string>
<string name="close">Close</string>
<string name="upload_video">Upload</string>
<string name="image_preview">Image preview</string>
<string name="file_to_upload">Select the file to upload</string>
<string name="channel">Channel</string>
<string name="videos">Videos</string>
<string name="channels">Channels</string>
<string name="yes">Yes</string>
<string name="no">No</string>
<string name="cancel">Cancel</string>
<string name="download">Download</string>
<string name="profile_picture">Profile picture</string>
<string name="update_video">Update video</string>
<string name="date_seconds">%d s</string>
<string name="date_minutes">%d m</string>
<string name="date_hours">%d h</string>
<string name="date_day">%d d</string>
<string name="number_view_video">%s views</string>
<string name="title_instance_login">Instance host</string>
<string name="uploading">Uploading, please wait…</string>
<string name="upload_video_success">The video has been uploaded!</string>
<string name="toast_cancelled">Upload cancelled!</string>
<string name="video_uploaded_action">Tap here to edit the video data.</string>
<string name="toot_select_image_error">An error occurred while selecting the media!</string>
<string name="download_file">Download %1$s</string>
<string name="action_privacy">Privacy</string>
<string name="action_logout">Logout</string>
<string name="login">Login</string>
<string name="password">Password</string>
<string name="email">Email</string>
<string name="tags">Tags</string>
<string name="validate">Validate</string>
<string name="share_with">Share with</string>
<string name="shared_via">Shared via TubeLab</string>
<string name="username">User name</string>
<string name="settings">Settings</string>
<string name="logout_account_confirmation">Are you sure you want to logout @%1$s@%2$s?</string>
<string name="following">Following</string>
<string name="followers">Followers</string>
<string name="client_error">Unable to get client id!</string>
<string name="toast_error_loading_account">An error occurred while switching between accounts!</string>
<string name="toast_error_search">An error occurred while searching!</string>
<string name="nothing_to_do">No action can be taken</string>
<string name="action_follow">Follow</string>
<string name="action_mute">Mute</string>
<string name="search">Search</string>
<string name="delete">Delete</string>
<string name="action_lists_confirm_delete">Are you sure you want to permanently delete this list?</string>
<string name="action_lists_delete">Delete list</string>
<string name="no_comments">Be the first to leave a comment on this video with the top right button!</string>
<string name="comment_no_allowed_peertube">Comments are not enabled on this video!</string>
<string name="pickup_resolution">Pick up a resolution</string>
<string name="bookmark_add_peertube">The video has been added to bookmarks!</string>
<string name="bookmark_remove_peertube">The video has been removed from bookmarks!</string>
<string name="information" tools:ignore="UnusedResources">Information</string>
<string name="app_logo">Logo of the application</string>
<!-- languages not translated -->
<string name="subscriptions">Subscriptions</string>
<string name="delete_comment">Delete a comment</string>
<string name="delete_comment_confirm">Are you sure to delete this comment?</string>
<string name="set_video_mode">Mode for videos</string>
<string name="my_videos">My videos</string>
<string name="title">Title</string>
<string name="license">License</string>
<string name="category">Category</string>
<string name="language">Language</string>
<string name="peertube_nsfw">This video contains mature or explicit content</string>
<string name="peertube_enable_comments">Enable video comments</string>
<string name="description">Description</string>
<string name="toast_peertube_video_updated">The video has been updated!</string>
<string name="register_account">Register an account</string>
<string name="email_address">Email address</string>
<string name="preview">Preview</string>
<string name="change_preview">Change preview</string>
<string name="name">Name</string>
<string name="display_more">Display more</string>
<string name="no_channels">No channels!</string>
<string name="report_helper">Some explanations about your report…</string>
<string name="report_video">Report video</string>
<string name="report">Report</string>
<string name="change_instance">Pickup another instance</string>
<string name="my_history">History</string>
<string name="edit">Edit</string>
<string name="set_video_mode_description">Allows to change mode for playing videos (default, streaming or via a browser).</string>
<string name="delete_video">Delete video</string>
<string name="delete_video_confirmation">Are you sure to delete this video?</string>
<string name="no_video_to_display">No videos to display!</string>
<string name="share">Share</string>
<string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> commented your video <b>%2$s</b>]]></string>
<string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> is following your channel <b>%2$s</b>]]></string>
<string name="peertube_follow_account"><![CDATA[<b>%1$s</b> is following your account]]></string>
<string name="peertube_video_published"><![CDATA[Your video <b>%1$s</b> has been published]]></string>
<string name="peertube_video_import_success"><![CDATA[Your video import <b>%1$s</b> succeeded]]></string>
<string name="peertube_video_import_error"><![CDATA[Your video import <b>%1$s</b> failed]]></string>
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> published a new video: <b>%2$s</b>]]></string>
<string name="peertube_video_blacklist"><![CDATA[Your video <b>%1$s</b> has been blacklisted]]></string>
<string name="peertube_video_unblacklist"><![CDATA[Your video <b>%1$s</b> has been unblacklisted]]></string>
<string name="add_public_comment">Add a public comment</string>
<string name="send_comment">Send comment</string>
<string name="all">All</string>
<!-- end languages -->
<string name="playlists">Playlists</string>
<string name="display_name">Display name</string>
<string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string>
<string name="error_display_name">You must provide a display name!</string>
<string name="error_channel_mandatory">The channel is required when the playlist is public.</string>
<string name="action_playlist_create">Create a playlist</string>
<string name="action_playlist_empty_content">There is nothing in this playlist yet.</string>
<string name="password_confirm">Confirm password</string>
<string name="agreement_check">I agree to %1$s and %2$s</string>
<string name="server_rules">server rules</string>
<string name="tos">terms of service</string>
<string name="sign_up">Sign up</string>
<string name="all_field_filled">Please, fill all the fields!</string>
<string name="password_error">Passwords don\'t match!</string>
<string name="email_error">The email doesn\'t seem to be valid!</string>
<string name="email_indicator">You will be sent a confirmation e-mail</string>
<string name="password_indicator">Use at least 8 characters</string>
<string name="password_too_short">Password should contain at least 8 characters</string>
<string name="username_error">Username should only contain letters, numbers and underscores</string>
<string name="account_created">Account created!</string>
<string name="account_created_message"> Your account has been created!\n\n
Think to validate your email within the 48 next hours.\n\n
You can now connect your account by writing <b>%1$s</b> in the first field and tap on <b>Connect</b>.\n\n
<b>Important</b>: If your instance required validation, you will receive an email once it is validated!
</string>
<string name="account">Account</string>
<string name="report_account">Report account</string>
<string-array name="settings_video_mode">
<item>Webview</item>
<item>Direct stream</item>
</string-array>
<string name="unfollow_confirm">Do you want to unfollow this account?</string>
<string name="title_video_peertube">Title for the video</string>
<string name="join_peertube">Join Peertube</string>
<string name="agreement_check_peertube">I am at least 16 years old and agree to the %1$s of this instance</string>
<string name="edit_profile">Edit profile</string>
<string name="make_an_action">Make an action</string>
<string name="action_unfollow">Unfollow</string>
<string name="display_nsfw_videos">Display sensitive videos</string>
<string name="fullscreen">Fullscreen</string>
<string name="bookmark_peertube_empty">There are no videos in your favourites!</string>
<string name="delete_channel">Remove channel</string>
<string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string>
<string name="no_muted">No muted accounts!</string>
<string name="error_display_name_channel">You must define a name and a display name for this channel!</string>
<string name="action_channel_create">Create a channel</string>
<string name="action_channel_edit">Edit channel</string>
<string name="email_error_domain">Email addresses in %1$s are not allowed!</string>
<string name="report_comment_size">Please, specify the reasons</string>
<string name="not_logged_in">You must be authenticated to proceed to this action!</string>
<string name="successful_report">The account has been reported!</string>
<string name="successful_video_report">The video has been reported!</string>
<string name="password_length_error">The password must contain at least 6 characters!</string>
<string name="muted_done">The account has been muted!</string>
<string name="edit_video">Edit video</string>
<string name="create_an_account">Create an account</string>
<string name="followers_count">%1$s Subscribers</string>
<string name="developer">Developer</string>
<string name="about_vesrion">Release %1$s</string>
<string name="about_the_app">About the app</string>
<string name="Donate">Donate</string>
<string name="source_code">Source code</string>
<string name="issue_tracker">Issue tracker</string>
<string name="action_instance_empty_content">No instances match these criteria</string>
<string name="instances_picker">Instances picker</string>
<string name="pickup_instance">Pickup this instance</string>
<string name="sensitive_video"> Sensitive videos</string>
<string name="sensitive_content">Sensitive content: %1$s</string>
<string name="followers_instance">%1$s followers instances</string>
<string name="help">Help</string>
<string name="pickup_categories">Pickup categories</string>
<string name="pickup_languages">Pickup languages</string>
<string name="notification_channel_name">Update information</string>
<string name="add_account">Add an account</string>
<string name="list_of_accounts">List of accounts</string>
</resources>

View File

@ -1,198 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="title_home">Home</string>
<string name="title_discover">Discover</string>
<string name="title_notifications">Notifications</string>
<string name="title_recently_added">Recently added</string>
<string name="title_trending">Trending</string>
<string name="title_most_liked">Most liked</string>
<string name="toast_error">Oops! An error occurred!</string>
<string name="title_muted">Muted</string>
<string name="title_channel">Channels</string>
<string name="do_not_list">Do not list</string>
<string name="blur">Blur</string>
<string name="display">Display</string>
<string name="no_opinion">No opinion</string>
<string name="instance_choice">Pickup an instance</string>
<string name="not_valide_instance">This instance does not seem to be valid!</string>
<string name="no_videos">No videos!</string>
<string name="favicon">Favicon</string>
<string name="open_with">Open with</string>
<string name="action_playlist_edit">Edit a playlist</string>
<string name="close">Close</string>
<string name="upload_video">Upload</string>
<string name="image_preview">Image preview</string>
<string name="file_to_upload">Select the file to upload</string>
<string name="channel">Channel</string>
<string name="videos">Videos</string>
<string name="channels">Channels</string>
<string name="yes">Yes</string>
<string name="no">No</string>
<string name="cancel">Cancel</string>
<string name="download">Download</string>
<string name="profile_picture">Profile picture</string>
<string name="update_video">Update video</string>
<string name="date_seconds">%d s</string>
<string name="date_minutes">%d m</string>
<string name="date_hours">%d h</string>
<string name="date_day">%d d</string>
<string name="number_view_video">%s views</string>
<string name="title_instance_login">Instance host</string>
<string name="uploading">Uploading, please wait…</string>
<string name="upload_video_success">The video has been uploaded!</string>
<string name="toast_cancelled">Upload cancelled!</string>
<string name="video_uploaded_action">Tap here to edit the video data.</string>
<string name="toot_select_image_error">An error occurred while selecting the media!</string>
<string name="download_file">Download %1$s</string>
<string name="action_privacy">Privacy</string>
<string name="action_logout">Logout</string>
<string name="login">Login</string>
<string name="password">Password</string>
<string name="email">Email</string>
<string name="tags">Tags</string>
<string name="validate">Validate</string>
<string name="share_with">Share with</string>
<string name="shared_via">Shared via TubeLab</string>
<string name="username">User name</string>
<string name="settings">Settings</string>
<string name="logout_account_confirmation">Are you sure you want to logout @%1$s@%2$s?</string>
<string name="following">Following</string>
<string name="followers">Followers</string>
<string name="client_error">Unable to get client id!</string>
<string name="toast_error_loading_account">An error occurred while switching between accounts!</string>
<string name="toast_error_search">An error occurred while searching!</string>
<string name="nothing_to_do">No action can be taken</string>
<string name="action_follow">Follow</string>
<string name="action_mute">Mute</string>
<string name="search">Search</string>
<string name="delete">Delete</string>
<string name="action_lists_confirm_delete">Are you sure you want to permanently delete this list?</string>
<string name="action_lists_delete">Delete list</string>
<string name="no_comments">Be the first to leave a comment on this video with the top right button!</string>
<string name="comment_no_allowed_peertube">Comments are not enabled on this video!</string>
<string name="pickup_resolution">Pick up a resolution</string>
<string name="bookmark_add_peertube">The video has been added to bookmarks!</string>
<string name="bookmark_remove_peertube">The video has been removed from bookmarks!</string>
<string name="information" tools:ignore="UnusedResources">Information</string>
<string name="app_logo">Logo of the application</string>
<!-- languages not translated -->
<string name="subscriptions">Subscriptions</string>
<string name="delete_comment">Delete a comment</string>
<string name="delete_comment_confirm">Are you sure to delete this comment?</string>
<string name="set_video_mode">Mode for videos</string>
<string name="my_videos">My videos</string>
<string name="title">Title</string>
<string name="license">License</string>
<string name="category">Category</string>
<string name="language">Language</string>
<string name="peertube_nsfw">This video contains mature or explicit content</string>
<string name="peertube_enable_comments">Enable video comments</string>
<string name="description">Description</string>
<string name="toast_peertube_video_updated">The video has been updated!</string>
<string name="register_account">Register an account</string>
<string name="email_address">Email address</string>
<string name="preview">Preview</string>
<string name="change_preview">Change preview</string>
<string name="name">Name</string>
<string name="display_more">Display more</string>
<string name="no_channels">No channels!</string>
<string name="report_helper">Some explanations about your report…</string>
<string name="report_video">Report video</string>
<string name="report">Report</string>
<string name="change_instance">Pickup another instance</string>
<string name="my_history">History</string>
<string name="edit">Edit</string>
<string name="set_video_mode_description">Allows to change mode for playing videos (default, streaming or via a browser).</string>
<string name="delete_video">Delete video</string>
<string name="delete_video_confirmation">Are you sure to delete this video?</string>
<string name="no_video_to_display">No videos to display!</string>
<string name="share">Share</string>
<string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> commented your video <b>%2$s</b>]]></string>
<string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> is following your channel <b>%2$s</b>]]></string>
<string name="peertube_follow_account"><![CDATA[<b>%1$s</b> is following your account]]></string>
<string name="peertube_video_published"><![CDATA[Your video <b>%1$s</b> has been published]]></string>
<string name="peertube_video_import_success"><![CDATA[Your video import <b>%1$s</b> succeeded]]></string>
<string name="peertube_video_import_error"><![CDATA[Your video import <b>%1$s</b> failed]]></string>
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> published a new video: <b>%2$s</b>]]></string>
<string name="peertube_video_blacklist"><![CDATA[Your video <b>%1$s</b> has been blacklisted]]></string>
<string name="peertube_video_unblacklist"><![CDATA[Your video <b>%1$s</b> has been unblacklisted]]></string>
<string name="add_public_comment">Add a public comment</string>
<string name="send_comment">Send comment</string>
<string name="all">All</string>
<!-- end languages -->
<string name="playlists">Playlists</string>
<string name="display_name">Display name</string>
<string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string>
<string name="error_display_name">You must provide a display name!</string>
<string name="error_channel_mandatory">The channel is required when the playlist is public.</string>
<string name="action_playlist_create">Create a playlist</string>
<string name="action_playlist_empty_content">There is nothing in this playlist yet.</string>
<string name="password_confirm">Confirm password</string>
<string name="agreement_check">I agree to %1$s and %2$s</string>
<string name="server_rules">server rules</string>
<string name="tos">terms of service</string>
<string name="sign_up">Sign up</string>
<string name="all_field_filled">Please, fill all the fields!</string>
<string name="password_error">Passwords don\'t match!</string>
<string name="email_error">The email doesn\'t seem to be valid!</string>
<string name="email_indicator">You will be sent a confirmation e-mail</string>
<string name="password_indicator">Use at least 8 characters</string>
<string name="password_too_short">Password should contain at least 8 characters</string>
<string name="username_error">Username should only contain letters, numbers and underscores</string>
<string name="account_created">Account created!</string>
<string name="account_created_message"> Your account has been created!\n\n
Think to validate your email within the 48 next hours.\n\n
You can now connect your account by writing <b>%1$s</b> in the first field and tap on <b>Connect</b>.\n\n
<b>Important</b>: If your instance required validation, you will receive an email once it is validated!
</string>
<string name="account">Account</string>
<string name="report_account">Report account</string>
<string-array name="settings_video_mode">
<item>Webview</item>
<item>Direct stream</item>
</string-array>
<string name="unfollow_confirm">Do you want to unfollow this account?</string>
<string name="title_video_peertube">Title for the video</string>
<string name="join_peertube">Join Peertube</string>
<string name="agreement_check_peertube">I am at least 16 years old and agree to the %1$s of this instance</string>
<string name="edit_profile">Edit profile</string>
<string name="make_an_action">Make an action</string>
<string name="action_unfollow">Unfollow</string>
<string name="display_nsfw_videos">Display sensitive videos</string>
<string name="fullscreen">Fullscreen</string>
<string name="bookmark_peertube_empty">There are no videos in your favourites!</string>
<string name="delete_channel">Remove channel</string>
<string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string>
<string name="no_muted">No muted accounts!</string>
<string name="error_display_name_channel">You must define a name and a display name for this channel!</string>
<string name="action_channel_create">Create a channel</string>
<string name="action_channel_edit">Edit channel</string>
<string name="email_error_domain">Email addresses in %1$s are not allowed!</string>
<string name="report_comment_size">Please, specify the reasons</string>
<string name="not_logged_in">You must be authenticated to proceed to this action!</string>
<string name="successful_report">The account has been reported!</string>
<string name="successful_video_report">The video has been reported!</string>
<string name="password_length_error">The password must contain at least 6 characters!</string>
<string name="muted_done">The account has been muted!</string>
<string name="edit_video">Edit video</string>
<string name="create_an_account">Create an account</string>
<string name="followers_count">%1$s Subscribers</string>
<string name="developer">Developer</string>
<string name="about_vesrion">Release %1$s</string>
<string name="about_the_app">About the app</string>
<string name="Donate">Donate</string>
<string name="source_code">Source code</string>
<string name="issue_tracker">Issue tracker</string>
<string name="action_instance_empty_content">No instances match these criteria</string>
<string name="instances_picker">Instances picker</string>
<string name="pickup_instance">Pickup this instance</string>
<string name="sensitive_video"> Sensitive videos</string>
<string name="sensitive_content">Sensitive content: %1$s</string>
<string name="followers_instance">%1$s followers instances</string>
<string name="help">Help</string>
<string name="pickup_categories">Pickup categories</string>
<string name="pickup_languages">Pickup languages</string>
<string name="notification_channel_name">Update information</string>
<string name="add_account">Add an account</string>
<string name="list_of_accounts">List of accounts</string>
</resources>

View File

@ -1,11 +1,47 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"> <resources xmlns:tools="http://schemas.android.com/tools">
<string name="set_video_in_list">Videoliste</string>
<string name="set_video_in_list_description">Layout für die Anzeige von Videos in einer Liste ändern</string>
<string name="no_instances">Keine Instanzen !</string>
<string name="show_more">Mehr anzeigen</string>
<string name="show_less">Weniger anzeigen</string>
<string name="set_play_screen_lock">Bildschirmsperre</string>
<string name="set_play_screen_lock_description">Videos weiterhin abspielen, wenn der Bildschirm gesperrt ist</string>
<string name="save">Speichern</string>
<string name="enable_history">Verlauf aktivieren</string>
<string name="change_profile_picture">Profilbild ändern</string>
<string name="set_autoplay">Automatische Wiedergabe</string>
<string name="set_autoplay_description">Wenn aktiviert, werden Videos automatisch abgespielt</string>
<string name="set_fullscreen">Vollbild</string>
<string name="set_fullscreen_description">Videos automatisch im Vollbildmodus öffnen</string>
<string name="set_autoplay_next_video">Automatisch nächstes Video starten</string>
<string name="set_autoplay_next_video_description">Wenn ein Video endet, nächstes vorgeschlagene starten.</string>
<string name="add_public_reply">Öffentliche Antwort hinzufügen</string>
<string name="activity">Aktivität</string>
<string name="app">Anwendung</string>
<string name="notif_new_video">Neues Video aus deinen Abonnements</string>
<string name="notif_new_comment">Neuer Kommentar zu deinem Video</string>
<string name="notif_blocked">Eines deiner Videos ist blockiert/entsperrt</string>
<string name="notif_video_published">Video veröffentlicht (nach Umkodierung/geplantem Update)</string>
<string name="notif_video_imported">Videoimport abgeschlossen</string>
<string name="notif_new_followers">Du oder dein Kanal(e) haben einen neuen Follower</string>
<string name="notif_video_mention">Jemand hat dich in einem Kommentar erwähnt</string>
<string name="notif_abuse_received">Es gibt eine neue Nachricht zu einem Missbrauchsbericht</string>
<string name="notif_abuse_accepted">Ein Missbrauchsbericht wurde von Moderatoren akzeptiert oder abgelehnt</string>
<plurals name="number_of_replies">
<item quantity="one">%d Antwort</item>
<item quantity="other">%d Antworten</item>
</plurals>
<string name="reply">Antworten</string>
<string name="set_theme">Erscheinungsbild</string>
<string name="set_theme_description">Erscheinungsbild ändern</string>
<string name="federation_issue">Das Video kann nicht föderiert eingebunden werden!</string>
<string name="title_home">Startseite</string> <string name="title_home">Startseite</string>
<string name="title_local">Local</string> <string name="title_local">Lokal</string>
<string name="title_discover">Mehr erfahren</string> <string name="title_discover">Entdecken</string>
<string name="title_notifications">Benachrichtigungen</string> <string name="title_notifications">Benachrichtigungen</string>
<string name="title_recently_added">Zuletzt hinzugefügt</string> <string name="title_recently_added">Zuletzt hinzugefügt</string>
<string name="title_trending">Beliebt</string> <string name="title_trending">Angesagt</string>
<string name="title_most_liked">Beliebteste</string> <string name="title_most_liked">Beliebteste</string>
<string name="toast_error">Hoppla, es gab einen Fehler!</string> <string name="toast_error">Hoppla, es gab einen Fehler!</string>
<string name="title_muted">Stummgeschaltet</string> <string name="title_muted">Stummgeschaltet</string>
@ -17,7 +53,7 @@
<string name="instance_choice">Wähle eine Instanz</string> <string name="instance_choice">Wähle eine Instanz</string>
<string name="not_valide_instance">Der Name der Instanz scheint ungültig zu sein!</string> <string name="not_valide_instance">Der Name der Instanz scheint ungültig zu sein!</string>
<string name="no_videos">Keine Videos!</string> <string name="no_videos">Keine Videos!</string>
<string name="no_notifications">No notifications!</string> <string name="no_notifications">Keine Benachrichtigungen!</string>
<string name="favicon">Favicon</string> <string name="favicon">Favicon</string>
<string name="open_with">Öffnen mit</string> <string name="open_with">Öffnen mit</string>
<string name="action_playlist_edit">Playlist bearbeiten</string> <string name="action_playlist_edit">Playlist bearbeiten</string>
@ -25,15 +61,32 @@
<string name="upload_video">Hochladen</string> <string name="upload_video">Hochladen</string>
<string name="image_preview">Bildvorschau</string> <string name="image_preview">Bildvorschau</string>
<string name="file_to_upload">Datei zum Hochladen auswählen</string> <string name="file_to_upload">Datei zum Hochladen auswählen</string>
<string name="new_video">Neues Video</string>
<string name="new_blacklist">Neue Blacklist Info</string>
<string name="new_my_video_published">Dein Video wurde veröffentlicht</string>
<string name="new_my_video_error">Fehler bei Veröffentlichung deines Videos</string>
<string name="new_comment">Neuer Kommentar</string>
<string name="new_follow">Neuer Follower</string>
<string name="channel">Kanal</string> <string name="channel">Kanal</string>
<string name="videos">Videos</string> <string name="videos">Videos</string>
<string name="channels">Kanäle</string> <string name="channels">Kanäle</string>
<string name="refresh_every">Rufe alle ab:</string>
<string-array name="refresh_time">
<item>Nie</item>
<item>15 Minuten</item>
<item>30 Minuten</item>
<item>1 Stunde</item>
<item>2 Stunden</item>
<item>6 Stunden</item>
<item>12 Stunden</item>
</string-array>
<string name="yes">Ja</string> <string name="yes">Ja</string>
<string name="no">Nein</string> <string name="no">Nein</string>
<string name="cancel">Abbrechen</string> <string name="cancel">Abbrechen</string>
<string name="download">Herunterladen</string> <string name="download">Herunterladen</string>
<string name="profile_picture">Profilbild</string> <string name="profile_picture">Profilbild</string>
<string name="update_video">Video aktualisieren</string> <string name="update_video">Video aktualisieren</string>
<string name="remove_from_playlist">Aus Playlist entfernen</string>
<string name="date_seconds">%d en</string> <string name="date_seconds">%d en</string>
<string name="date_minutes">%d en</string> <string name="date_minutes">%d en</string>
<string name="date_hours">%d en</string> <string name="date_hours">%d en</string>
@ -46,6 +99,7 @@
<string name="video_uploaded_action">Hier klicken, um die Videodetails zu bearbeiten.</string> <string name="video_uploaded_action">Hier klicken, um die Videodetails zu bearbeiten.</string>
<string name="toot_select_image_error">Fehler beim Wählen des Bildes!</string> <string name="toot_select_image_error">Fehler beim Wählen des Bildes!</string>
<string name="download_file">%1$s heruntergeladen</string> <string name="download_file">%1$s heruntergeladen</string>
<string name="account_updated">Benutzerkonto wurde aktualisiert!</string>
<string name="action_privacy">Datenschutz</string> <string name="action_privacy">Datenschutz</string>
<string name="action_logout">Abmelden</string> <string name="action_logout">Abmelden</string>
<string name="login">Einloggen</string> <string name="login">Einloggen</string>
@ -79,9 +133,38 @@
<string name="app_logo">Logo der Anwendung</string> <string name="app_logo">Logo der Anwendung</string>
<!-- languages not translated --> <!-- languages not translated -->
<string name="subscriptions">Abonnements</string> <string name="subscriptions">Abonnements</string>
<string name="delete_instance">Eine Instanz entfernen</string>
<string name="delete_instance_confirm">Möchtest du diese Instanz wirklich entfernen?</string>
<string name="delete_comment">Kommentar löschen</string> <string name="delete_comment">Kommentar löschen</string>
<string name="delete_comment_confirm">Möchtest du diesen Kommentar wirklich löschen?</string> <string name="delete_comment_confirm">Möchtest du diesen Kommentar wirklich löschen?</string>
<string name="set_video_mode">Videomodus</string> <string name="set_video_mode">Videomodus</string>
<string name="filter">Filter</string>
<string name="sepia_search">Sepia-Suche</string>
<string name="sepia_element_nsfw">Heikle Inhalte anzeigen</string>
<string name="sepia_element_published_date">Veröffentlichungsdatum</string>
<string name="any">Beliebig</string>
<string name="today">Heute</string>
<string name="last_7_days">Letze 7 Tage</string>
<string name="last_30_days">Letzte 30 Tage</string>
<string name="last_365_days">Letztes Jahr</string>
<string name="sepia_element_duration">Dauer</string>
<string name="duration_short"><![CDATA[Kurze (<4 min)]]></string>
<string name="duration_medium"><![CDATA[Mittel (410 min)]]></string>
<string name="duration_long"><![CDATA[Lang (> 10 min)]]></string>
<string name="display_all_categories">Alle Kategorien anzeigen</string>
<string name="display_all_licenses">Alle Lizenzen anzeigen</string>
<string name="display_all_languages">Alle Sprachen anzeigen</string>
<string name="all_of_these_tags">Alle diese Tags</string>
<string name="one_of_these_tags">Einer dieser Tags</string>
<string name="apply_filter">Filter anwenden</string>
<string-array name="sort_by_array">
<item>Beste Übereinstimmung</item>
<item>Neueste</item>
<item>Älteste zuerst</item>
</string-array>
<string name="sort_by">Sortieren nach</string>
<string name="sepia_search_hint">Keyword, Kanal, Video, etc.</string>
<string name="sepia_indication">Die Sepia-Suche zeigt Videos und Kanäle an welche zu deiner Suche passen, ist aber weder der Eigentümer noch der Verantwortliche für die Veröffentlichung. Falls du Probleme mit einem Video hast, dann melde dies dem Administrator der PeerTube Seite auf welcher das Video veröffentlicht wurde. </string>
<string name="my_videos">Eigene Videos</string> <string name="my_videos">Eigene Videos</string>
<string name="title">Titel</string> <string name="title">Titel</string>
<string name="license">Lizenz</string> <string name="license">Lizenz</string>
@ -98,23 +181,25 @@
<string name="name">Name</string> <string name="name">Name</string>
<string name="display_more">Mehr anzeigen</string> <string name="display_more">Mehr anzeigen</string>
<string name="no_channels">Keine Kanäle!</string> <string name="no_channels">Keine Kanäle!</string>
<string name="report_helper">Einige Erklärungen zu deinem Bericht</string> <string name="report_helper">Einige Erklärungen zu deiner Meldung</string>
<string name="report_video">Video melden</string> <string name="report_video">Video melden</string>
<string name="report">Bericht</string> <string name="report">Melden</string>
<string name="change_instance">Wähle eine andere Instanz</string> <string name="change_instance">Wähle eine andere Instanz</string>
<string name="my_history">Verlauf</string> <string name="my_history">Verlauf</string>
<string name="edit">Bearbeiten</string> <string name="edit">Bearbeiten</string>
<string name="video_settings">Video settings</string> <string name="video_settings">Video-Einstellungen</string>
<string name="app_interface">Interface</string> <string name="app_interface">Benutzeroberfläche</string>
<string name="set_cache_mode">Cache</string> <string name="set_cache_mode">Zwischenspeicher</string>
<string name="set_video_cache_description">Définir le cache pour les vidéos (défaut 100Mo)</string> <string name="set_video_cache_description">Lege die Größe des Zwischenspeichers für Videos fest (Standard 100MB)</string>
<string name="set_video_quality_description">Define a default quality for videos</string> <string name="set_video_quality_description">Standardqualität für Videos festlegen</string>
<string name="set_quality_mode">Resolution for videos</string> <string name="set_quality_mode">Auflösung für Videos</string>
<string name="video_cache_value">Video cache: %d Mb</string> <string name="video_cache_value">Video-Zwischenspeicher: %d MB</string>
<string name="captions">Untertitel</string> <string name="captions">Untertitel</string>
<string name="pickup_captions">Untertitel abholen</string> <string name="pickup_captions">Untertitel abholen</string>
<string name="none">Keine</string> <string name="none">Keine</string>
<string name="set_video_mode_description">Erlaubt es, den Modus für das Abspielen von Videos zu ändern (Standard, Streaming oder über einen Browser).</string> <string name="set_video_mode_description">Erlaubt es, den Modus für das Abspielen von Videos zu ändern (Standard, Streaming oder über einen Browser).</string>
<string name="delete_account_comment">Konto-Kommentare löschen</string>
<string name="delete_account_comment_confirm">Sind Sie sicher, dass Sie alle Kommentare dieses Kontos entfernen möchten?</string>
<string name="delete_video">Video löschen</string> <string name="delete_video">Video löschen</string>
<string name="delete_video_confirmation">Möchtest du dieses Video wirklich löschen?</string> <string name="delete_video_confirmation">Möchtest du dieses Video wirklich löschen?</string>
<string name="no_video_to_display">Keine Videos zum Anzeigen!</string> <string name="no_video_to_display">Keine Videos zum Anzeigen!</string>
@ -128,12 +213,22 @@
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> hat ein neues Video veröffentlicht: <b>%2$s</b>]]></string> <string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> hat ein neues Video veröffentlicht: <b>%2$s</b>]]></string>
<string name="peertube_video_blacklist"><![CDATA[Dein Video <b>%1$s</b> wurde gesperrt]]></string> <string name="peertube_video_blacklist"><![CDATA[Dein Video <b>%1$s</b> wurde gesperrt]]></string>
<string name="peertube_video_unblacklist"><![CDATA[Die Sperre für dein Video <b>%1$s</b> wurde aufgehoben]]></string> <string name="peertube_video_unblacklist"><![CDATA[Die Sperre für dein Video <b>%1$s</b> wurde aufgehoben]]></string>
<string name="peertube_video_abuse"><![CDATA[New abuse report for video: <b>%1$s</b>]]></string> <string name="peertube_video_report_success"><![CDATA[Deine Missbrauchs-Meldung <b>%1$s</b> wurde übermittelt]]></string>
<string name="peertube_video_abuse"><![CDATA[Neuer Missbrauchsbericht für Video: <b>%1$s</b>]]></string>
<string name="add_public_comment">Öffentlichen Kommentar hinzufügen</string> <string name="add_public_comment">Öffentlichen Kommentar hinzufügen</string>
<string name="send_comment">Kommentar absenden</string> <string name="send_comment">Kommentar absenden</string>
<string name="all">Alle</string> <string name="all">Alle</string>
<!-- end languages --> <!-- end languages -->
<string name="delete_history">Delete videos history</string>
<string name="delete_history_confirm">Are you sure you want to delete all your videos history?</string>
<string name="export_list">Export</string>
<string name="import_list">Import</string>
<string name="export_notification_title">Successful export!</string>
<string name="export_notification_content">Tap here to send the export by email</string>
<string name="export_notification_subjet">New Playlist</string>
<string name="export_notification_body">Open the attached file with TubeLab</string>
<string name="playlists">Wiedergabelisten</string> <string name="playlists">Wiedergabelisten</string>
<string name="no_playlist">No playlists</string>
<string name="display_name">Anzeigename</string> <string name="display_name">Anzeigename</string>
<string name="action_playlist_add">Sie haben noch keine Wiedergabelisten. Klicken Sie auf das Symbol „➕”, um eine neue Wiedergabeliste hinzuzufügen.</string> <string name="action_playlist_add">Sie haben noch keine Wiedergabelisten. Klicken Sie auf das Symbol „➕”, um eine neue Wiedergabeliste hinzuzufügen.</string>
<string name="error_display_name">Du musst einen Anzeigenamen angeben!</string> <string name="error_display_name">Du musst einen Anzeigenamen angeben!</string>
@ -158,16 +253,23 @@
Du kannst nun deinen Account verbinden, indem du <b>%1$s</b> in das erste Feld schreibst und auf <b>Verbinden</b>klickst.\n\n Du kannst nun deinen Account verbinden, indem du <b>%1$s</b> in das erste Feld schreibst und auf <b>Verbinden</b>klickst.\n\n
<b>Wichtig</b>: Wenn deine Instanz eine Bestätigung benötigt, erhältst du eine E-Mail, sobald sie geprüft wurde! <b>Wichtig</b>: Wenn deine Instanz eine Bestätigung benötigt, erhältst du eine E-Mail, sobald sie geprüft wurde!
</string> </string>
<string name="account">Account</string> <string name="account">Benutzerkonto</string>
<string name="report_account">Account melden</string> <string name="report_account">Account melden</string>
<string-array name="settings_video_mode"> <string-array name="settings_video_mode">
<item>Normal</item>
<item>WebView</item> <item>WebView</item>
<item>Direkter Datenstrom</item> <item>Magnet</item>
<item>Torrent</item>
</string-array>
<string-array name="settings_theme">
<item>Hell</item>
<item>Dunkel</item>
<item>Automatisch</item>
</string-array> </string-array>
<string-array name="settings_video_quality"> <string-array name="settings_video_quality">
<item>High</item> <item>Hoch</item>
<item>Medium</item> <item>Mittel</item>
<item>Low</item> <item>Niedrig</item>
</string-array> </string-array>
<string name="unfollow_confirm">Möchtest du diesem Konto nicht mehr folgen?</string> <string name="unfollow_confirm">Möchtest du diesem Konto nicht mehr folgen?</string>
<string name="title_video_peertube">Videotitel</string> <string name="title_video_peertube">Videotitel</string>
@ -181,6 +283,7 @@
<string name="bookmark_peertube_empty">Keine Videos in den Favoriten!</string> <string name="bookmark_peertube_empty">Keine Videos in den Favoriten!</string>
<string name="delete_channel">Kanal entfernen</string> <string name="delete_channel">Kanal entfernen</string>
<string name="action_channel_confirm_delete">Möchtest du diesen Kanal wirklich löschen?</string> <string name="action_channel_confirm_delete">Möchtest du diesen Kanal wirklich löschen?</string>
<string name="modify_playlists">Video in Wiedergabelisten</string>
<string name="no_muted">Keine stummgeschalteten Accounts!</string> <string name="no_muted">Keine stummgeschalteten Accounts!</string>
<string name="error_display_name_channel">Du musst einen Namen und einen Anzeigenamen für diesen Kanal definieren!</string> <string name="error_display_name_channel">Du musst einen Namen und einen Anzeigenamen für diesen Kanal definieren!</string>
<string name="action_channel_create">Kanal erstellen</string> <string name="action_channel_create">Kanal erstellen</string>
@ -189,7 +292,7 @@
<string name="report_comment_size">Bitte gib einen Grund an</string> <string name="report_comment_size">Bitte gib einen Grund an</string>
<string name="not_logged_in">Du musst authentifiziert sein, um diesen Vorgang auszuführen.</string> <string name="not_logged_in">Du musst authentifiziert sein, um diesen Vorgang auszuführen.</string>
<string name="successful_report">Der Account wurde gemeldet!</string> <string name="successful_report">Der Account wurde gemeldet!</string>
<string name="successful_report_comment">The comment has been reported!</string> <string name="successful_report_comment">Der Kommentar wurde gemeldet!</string>
<string name="successful_video_report">Dieses Video wurde gemeldet!</string> <string name="successful_video_report">Dieses Video wurde gemeldet!</string>
<string name="password_length_error">Das Passwort muss mindestens 6 Zeichen lang sein!</string> <string name="password_length_error">Das Passwort muss mindestens 6 Zeichen lang sein!</string>
<string name="muted_done">Der Account wurde stummgeschaltet!</string> <string name="muted_done">Der Account wurde stummgeschaltet!</string>
@ -212,6 +315,7 @@
<string name="pickup_categories">Kategorien wählen</string> <string name="pickup_categories">Kategorien wählen</string>
<string name="pickup_languages">Sprachen wählen</string> <string name="pickup_languages">Sprachen wählen</string>
<string name="notification_channel_name">Information aktualisiert</string> <string name="notification_channel_name">Information aktualisiert</string>
<string name="fetch_notification_channel_name">Rufe Benachrichtigungen ab</string>
<string name="add_account">Füge einen Account hinzu</string> <string name="add_account">Füge einen Account hinzu</string>
<string name="list_of_accounts">Liste der Accounts</string> <string name="list_of_accounts">Liste der Accounts</string>
<string name="pause">Pause</string> <string name="pause">Pause</string>

View File

@ -1,7 +1,43 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"> <resources xmlns:tools="http://schemas.android.com/tools">
<string name="set_video_in_list">Videos in list</string>
<string name="set_video_in_list_description">Change the layout for displaying videos in a list</string>
<string name="no_instances">No instances !</string>
<string name="show_more">Show more</string>
<string name="show_less">Show less</string>
<string name="set_play_screen_lock">Screen lock</string>
<string name="set_play_screen_lock_description">Keep playing videos when the screen is locked</string>
<string name="save">Save</string>
<string name="enable_history">Enable history</string>
<string name="change_profile_picture">Change profile picture</string>
<string name="set_autoplay">Automatic playback</string>
<string name="set_autoplay_description">If enabled, videos will be played automatically</string>
<string name="set_fullscreen">Fullscreen</string>
<string name="set_fullscreen_description">Automatically open videos in fullscreen</string>
<string name="set_autoplay_next_video">Automatically start playing the next video</string>
<string name="set_autoplay_next_video_description">When a video ends, follow up with the next suggested video.</string>
<string name="add_public_reply">Προσθήκη δημόσιας απάντησης</string>
<string name="activity">Activity</string>
<string name="app">App</string>
<string name="notif_new_video">New video from your subscriptions</string>
<string name="notif_new_comment">New comment on your video</string>
<string name="notif_blocked">One of your video is blocked/unblocked</string>
<string name="notif_video_published">Video published (after transcoding/scheduled update)</string>
<string name="notif_video_imported">Video import finished</string>
<string name="notif_new_followers">You or your channel(s) has a new follower</string>
<string name="notif_video_mention">Someone mentioned you in video comments</string>
<string name="notif_abuse_received">An abuse report received a new message</string>
<string name="notif_abuse_accepted">One of your abuse reports has been accepted or rejected by moderators</string>
<plurals name="number_of_replies">
<item quantity="one">%d απάντηση</item>
<item quantity="other">%d απαντήσεις</item>
</plurals>
<string name="reply">Απάντηση</string>
<string name="set_theme">Θέμα</string>
<string name="set_theme_description">Allow to change app theme</string>
<string name="federation_issue">The video cannot be federated!</string>
<string name="title_home">Αρχική</string> <string name="title_home">Αρχική</string>
<string name="title_local">Local</string> <string name="title_local">Τοπικά</string>
<string name="title_discover">Ανακαλύψτε</string> <string name="title_discover">Ανακαλύψτε</string>
<string name="title_notifications">Ειδοποιήσεις</string> <string name="title_notifications">Ειδοποιήσεις</string>
<string name="title_recently_added">Προστέθηκαν πρόσφατα</string> <string name="title_recently_added">Προστέθηκαν πρόσφατα</string>
@ -17,7 +53,7 @@
<string name="instance_choice">Επιλογή υπόστασης</string> <string name="instance_choice">Επιλογή υπόστασης</string>
<string name="not_valide_instance">Η υπόσταση δεν μοιάζει να είναι έγκυρη!</string> <string name="not_valide_instance">Η υπόσταση δεν μοιάζει να είναι έγκυρη!</string>
<string name="no_videos">Κανένα βίντεο!</string> <string name="no_videos">Κανένα βίντεο!</string>
<string name="no_notifications">No notifications!</string> <string name="no_notifications">Δεν υπάρχουν ειδοποιήσεις!</string>
<string name="favicon">Favicon</string> <string name="favicon">Favicon</string>
<string name="open_with">Άνοιγμα με</string> <string name="open_with">Άνοιγμα με</string>
<string name="action_playlist_edit">Επεξεργασία λίστας αναπαραγωγής</string> <string name="action_playlist_edit">Επεξεργασία λίστας αναπαραγωγής</string>
@ -25,15 +61,32 @@
<string name="upload_video">Μεταφόρτωση</string> <string name="upload_video">Μεταφόρτωση</string>
<string name="image_preview">Προεπισκόπηση εικόνας</string> <string name="image_preview">Προεπισκόπηση εικόνας</string>
<string name="file_to_upload">Επιλέξτε το αρχείο για μεταφόρτωση</string> <string name="file_to_upload">Επιλέξτε το αρχείο για μεταφόρτωση</string>
<string name="new_video">New video</string>
<string name="new_blacklist">New blacklist info</string>
<string name="new_my_video_published">Your video is published</string>
<string name="new_my_video_error">Error when publishing your video</string>
<string name="new_comment">New comment</string>
<string name="new_follow">New follow</string>
<string name="channel">Κανάλι</string> <string name="channel">Κανάλι</string>
<string name="videos">Βίντεο</string> <string name="videos">Βίντεο</string>
<string name="channels">Κανάλια</string> <string name="channels">Κανάλια</string>
<string name="refresh_every">Fetch every:</string>
<string-array name="refresh_time">
<item>Never</item>
<item>15 minutes</item>
<item>30 minutes</item>
<item>1 hour</item>
<item>2 hours</item>
<item>6 hours</item>
<item>12 hours</item>
</string-array>
<string name="yes">Ναι</string> <string name="yes">Ναι</string>
<string name="no">Όχι</string> <string name="no">Όχι</string>
<string name="cancel">Ακύρωση</string> <string name="cancel">Ακύρωση</string>
<string name="download">Λήψη</string> <string name="download">Λήψη</string>
<string name="profile_picture">Εικόνα προφίλ</string> <string name="profile_picture">Εικόνα προφίλ</string>
<string name="update_video">Ενημέρωση του βίντεο</string> <string name="update_video">Ενημέρωση του βίντεο</string>
<string name="remove_from_playlist">Κατάργηση από τη λίστα αναπαραγωγής</string>
<string name="date_seconds">%d δευτ</string> <string name="date_seconds">%d δευτ</string>
<string name="date_minutes">%d λεπ</string> <string name="date_minutes">%d λεπ</string>
<string name="date_hours">%d ώρ</string> <string name="date_hours">%d ώρ</string>
@ -46,6 +99,7 @@
<string name="video_uploaded_action">Κάντε κλικ εδώ για επεξεργασία δεδομένων του βίντεο.</string> <string name="video_uploaded_action">Κάντε κλικ εδώ για επεξεργασία δεδομένων του βίντεο.</string>
<string name="toot_select_image_error">Παρουσιάστηκε κάποιο σφάλμα κατά την επιλογή του πολυμέσου!</string> <string name="toot_select_image_error">Παρουσιάστηκε κάποιο σφάλμα κατά την επιλογή του πολυμέσου!</string>
<string name="download_file">Λήψη του %1$s</string> <string name="download_file">Λήψη του %1$s</string>
<string name="account_updated">The account has been updated!</string>
<string name="action_privacy">Ιδιωτικότητα</string> <string name="action_privacy">Ιδιωτικότητα</string>
<string name="action_logout">Αποσύνδεση</string> <string name="action_logout">Αποσύνδεση</string>
<string name="login">Σύνδεση</string> <string name="login">Σύνδεση</string>
@ -79,9 +133,38 @@
<string name="app_logo">Το λογότυπο της εφαρμογής</string> <string name="app_logo">Το λογότυπο της εφαρμογής</string>
<!-- languages not translated --> <!-- languages not translated -->
<string name="subscriptions">Συνδρομές</string> <string name="subscriptions">Συνδρομές</string>
<string name="delete_instance">Delete an instance</string>
<string name="delete_instance_confirm">Are you sure to delete this instance?</string>
<string name="delete_comment">Διαγραφή ενός σχόλιου</string> <string name="delete_comment">Διαγραφή ενός σχόλιου</string>
<string name="delete_comment_confirm">Θέλετε να διαγράψετε αυτό το σχόλιο, στα σίγουρα;</string> <string name="delete_comment_confirm">Θέλετε να διαγράψετε αυτό το σχόλιο, στα σίγουρα;</string>
<string name="set_video_mode">Κατάσταση λειτουργίας για τα βίντεο</string> <string name="set_video_mode">Κατάσταση λειτουργίας για τα βίντεο</string>
<string name="filter">Φίλτρο</string>
<string name="sepia_search">Sepia search</string>
<string name="sepia_element_nsfw">Εμφάνιση ευαίσθητου περιεχομένου</string>
<string name="sepia_element_published_date">Ημερομηνία δημοσίευσης</string>
<string name="any">Οποιαδήποτε</string>
<string name="today">Σήμερα</string>
<string name="last_7_days">Τελευταίες 7 μέρες</string>
<string name="last_30_days">Τελευταίες 30 μέρες</string>
<string name="last_365_days">Τελευταίες 365 μέρες</string>
<string name="sepia_element_duration">Διάρκεια</string>
<string name="duration_short"><![CDATA[Σύντομο (<4 λεπτά)]]></string>
<string name="duration_medium"><![CDATA[Μεσαίο (4-10 λεπτά)]]></string>
<string name="duration_long"><![CDATA[Μακρύ (>10 λεπτά)]]></string>
<string name="display_all_categories">Εμφάνιση όλων των κατηγοριών</string>
<string name="display_all_licenses">Εμφάνιση όλων των αδειών</string>
<string name="display_all_languages">Εμφάνιση όλων των γλωσσών</string>
<string name="all_of_these_tags">All of these tags</string>
<string name="one_of_these_tags">One of these tags</string>
<string name="apply_filter">Εφαρμογή φίλτρου</string>
<string-array name="sort_by_array">
<item>Best match</item>
<item>Πιο πρόσφατα</item>
<item>Λιγότερο πρόσφατα</item>
</string-array>
<string name="sort_by">Ταξινόμηση κατά</string>
<string name="sepia_search_hint">Keyword, channel, video, etc.</string>
<string name="sepia_indication">Sepia Search displays videos and channels that match your search but is not the publisher, nor the owner. If you notice any problems with a video, report it to the administrators on the PeerTube website where the video is published.</string>
<string name="my_videos">Τα βίντεο μου</string> <string name="my_videos">Τα βίντεο μου</string>
<string name="title">Τίτλος</string> <string name="title">Τίτλος</string>
<string name="license">Άδεια</string> <string name="license">Άδεια</string>
@ -105,16 +188,18 @@
<string name="my_history">Ιστορικό</string> <string name="my_history">Ιστορικό</string>
<string name="edit">Επεξεργασία</string> <string name="edit">Επεξεργασία</string>
<string name="video_settings">Video settings</string> <string name="video_settings">Video settings</string>
<string name="app_interface">Interface</string> <string name="app_interface">Περιβάλλον Χρήσης</string>
<string name="set_cache_mode">Cache</string> <string name="set_cache_mode">Μνήμη cache</string>
<string name="set_video_cache_description">Définir le cache pour les vidéos (défaut 100Mo)</string> <string name="set_video_cache_description">Ορίστε την μνήμη cache για τα βίντεο (προεπιλογή 100MB)</string>
<string name="set_video_quality_description">Define a default quality for videos</string> <string name="set_video_quality_description">Ορίστε την προεπιλεγμένη ποιότητα για τα βίντεο</string>
<string name="set_quality_mode">Resolution for videos</string> <string name="set_quality_mode">Ανάλυση για τα βίντεο</string>
<string name="video_cache_value">Video cache: %d Mb</string> <string name="video_cache_value">Μνήμη cache για τα βίντεο: %d MB</string>
<string name="captions">Υπότιτλοι</string> <string name="captions">Υπότιτλοι</string>
<string name="pickup_captions">Επιλογή υποτίτλων</string> <string name="pickup_captions">Επιλογή υποτίτλων</string>
<string name="none">Κανένας</string> <string name="none">Κανένας</string>
<string name="set_video_mode_description">Επιτρέπει την εναλλαγή κατάστασης λειτουργίας για την αναπαραγωγή βίντεο (προεπιλεγμένη, ροή ή μέσω περιηγητή ιστού).</string> <string name="set_video_mode_description">Επιτρέπει την εναλλαγή κατάστασης λειτουργίας για την αναπαραγωγή βίντεο (προεπιλεγμένη, ροή ή μέσω περιηγητή ιστού).</string>
<string name="delete_account_comment">Διαγραφή σχολίων λογαριασμού</string>
<string name="delete_account_comment_confirm">Are you sure you want to remove all the comments of this account?</string>
<string name="delete_video">Διαγραφή βίντεο</string> <string name="delete_video">Διαγραφή βίντεο</string>
<string name="delete_video_confirmation">Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτό το βίντεο;</string> <string name="delete_video_confirmation">Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτό το βίντεο;</string>
<string name="no_video_to_display">Δεν υπάρχουν βίντεο για προβολή!</string> <string name="no_video_to_display">Δεν υπάρχουν βίντεο για προβολή!</string>
@ -128,12 +213,22 @@
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> Δημοσίευσε ένα νέο βίντεο: <b>%2$s</b>]]></string> <string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> Δημοσίευσε ένα νέο βίντεο: <b>%2$s</b>]]></string>
<string name="peertube_video_blacklist"><![CDATA[Το βίντεό σου <b>%1$s</b> έχει μπει στη μαύρη λίστα]]></string> <string name="peertube_video_blacklist"><![CDATA[Το βίντεό σου <b>%1$s</b> έχει μπει στη μαύρη λίστα]]></string>
<string name="peertube_video_unblacklist"><![CDATA[Το βίντεό σου <b>%1$s</b> έχει βγει από τη μαύρη λίστα]]></string> <string name="peertube_video_unblacklist"><![CDATA[Το βίντεό σου <b>%1$s</b> έχει βγει από τη μαύρη λίστα]]></string>
<string name="peertube_video_report_success"><![CDATA[Your abuse report <b>%1$s</b> has been accepted]]></string>
<string name="peertube_video_abuse"><![CDATA[New abuse report for video: <b>%1$s</b>]]></string> <string name="peertube_video_abuse"><![CDATA[New abuse report for video: <b>%1$s</b>]]></string>
<string name="add_public_comment">Προσθήκη ενός δημόσιου σχόλιου</string> <string name="add_public_comment">Προσθήκη ενός δημόσιου σχόλιου</string>
<string name="send_comment">Αποστολή σχόλιου</string> <string name="send_comment">Αποστολή σχόλιου</string>
<string name="all">Όλα</string> <string name="all">Όλα</string>
<!-- end languages --> <!-- end languages -->
<string name="delete_history">Delete videos history</string>
<string name="delete_history_confirm">Are you sure you want to delete all your videos history?</string>
<string name="export_list">Export</string>
<string name="import_list">Import</string>
<string name="export_notification_title">Successful export!</string>
<string name="export_notification_content">Tap here to send the export by email</string>
<string name="export_notification_subjet">New Playlist</string>
<string name="export_notification_body">Open the attached file with TubeLab</string>
<string name="playlists">Λίστες αναπαραγωγής</string> <string name="playlists">Λίστες αναπαραγωγής</string>
<string name="no_playlist">No playlists</string>
<string name="display_name">Εμφανιζόμενο όνομα</string> <string name="display_name">Εμφανιζόμενο όνομα</string>
<string name="action_playlist_add">Δεν έχετε καμία λίστα αναπαραγωγής. Κάντε κλικ στο εικονίδιο « + », για να προσθέσετε μία καινούργια λίστα</string> <string name="action_playlist_add">Δεν έχετε καμία λίστα αναπαραγωγής. Κάντε κλικ στο εικονίδιο « + », για να προσθέσετε μία καινούργια λίστα</string>
<string name="error_display_name">Πρέπει να εισάγεται ένα όνομα εμφάνισης!</string> <string name="error_display_name">Πρέπει να εισάγεται ένα όνομα εμφάνισης!</string>
@ -162,11 +257,18 @@
<string-array name="settings_video_mode"> <string-array name="settings_video_mode">
<item>Webview</item> <item>Webview</item>
<item>Άμεση ροή</item> <item>Άμεση ροή</item>
<item>Magnet</item>
<item>Torrent</item>
</string-array>
<string-array name="settings_theme">
<item>Φωτεινό</item>
<item>Σκοτεινό</item>
<item>Αυτόματο</item>
</string-array> </string-array>
<string-array name="settings_video_quality"> <string-array name="settings_video_quality">
<item>High</item> <item>Υψηλή</item>
<item>Medium</item> <item>Μεσαία</item>
<item>Low</item> <item>Χαμηλή</item>
</string-array> </string-array>
<string name="unfollow_confirm">Θέλετε να σταματήσετε να παρακολουθείτε αυτό το λογαριασμό;</string> <string name="unfollow_confirm">Θέλετε να σταματήσετε να παρακολουθείτε αυτό το λογαριασμό;</string>
<string name="title_video_peertube">Τίτλος του βίντεο</string> <string name="title_video_peertube">Τίτλος του βίντεο</string>
@ -180,6 +282,7 @@
<string name="bookmark_peertube_empty">Δεν υπάρχουν βίντεο στα αγαπημένα σας!</string> <string name="bookmark_peertube_empty">Δεν υπάρχουν βίντεο στα αγαπημένα σας!</string>
<string name="delete_channel">Αφαίρεση καναλιού</string> <string name="delete_channel">Αφαίρεση καναλιού</string>
<string name="action_channel_confirm_delete">Θέλετε σίγουρα να διαγραφεί αυτό το κανάλι;</string> <string name="action_channel_confirm_delete">Θέλετε σίγουρα να διαγραφεί αυτό το κανάλι;</string>
<string name="modify_playlists">Video in playlists</string>
<string name="no_muted">Δεν υπάρχουν σιγασμένοι λογαριασμοί!</string> <string name="no_muted">Δεν υπάρχουν σιγασμένοι λογαριασμοί!</string>
<string name="error_display_name_channel">Πρέπει να ορίσετε ένα όνομα και ένα όνομα εμφάνισης για αυτό το κανάλι!</string> <string name="error_display_name_channel">Πρέπει να ορίσετε ένα όνομα και ένα όνομα εμφάνισης για αυτό το κανάλι!</string>
<string name="action_channel_create">Δημιουργία καναλιού</string> <string name="action_channel_create">Δημιουργία καναλιού</string>
@ -211,6 +314,7 @@
<string name="pickup_categories">Επιλογή κατηγοριών</string> <string name="pickup_categories">Επιλογή κατηγοριών</string>
<string name="pickup_languages">Επιλογή γλωσσών</string> <string name="pickup_languages">Επιλογή γλωσσών</string>
<string name="notification_channel_name">Ενημέρωση πληροφοριών</string> <string name="notification_channel_name">Ενημέρωση πληροφοριών</string>
<string name="fetch_notification_channel_name">Fetch notifications</string>
<string name="add_account">Προσθήκη λογαριασμού</string> <string name="add_account">Προσθήκη λογαριασμού</string>
<string name="list_of_accounts">Λίστα λογαριασμών</string> <string name="list_of_accounts">Λίστα λογαριασμών</string>
<string name="pause">Παύση</string> <string name="pause">Παύση</string>

View File

@ -1,198 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="title_home">Home</string>
<string name="title_discover">Discover</string>
<string name="title_notifications">Notifications</string>
<string name="title_recently_added">Recently added</string>
<string name="title_trending">Trending</string>
<string name="title_most_liked">Most liked</string>
<string name="toast_error">Oops! An error occurred!</string>
<string name="title_muted">Muted</string>
<string name="title_channel">Channels</string>
<string name="do_not_list">Do not list</string>
<string name="blur">Blur</string>
<string name="display">Display</string>
<string name="no_opinion">No opinion</string>
<string name="instance_choice">Pickup an instance</string>
<string name="not_valide_instance">This instance does not seem to be valid!</string>
<string name="no_videos">No videos!</string>
<string name="favicon">Favicon</string>
<string name="open_with">Open with</string>
<string name="action_playlist_edit">Edit a playlist</string>
<string name="close">Close</string>
<string name="upload_video">Upload</string>
<string name="image_preview">Image preview</string>
<string name="file_to_upload">Select the file to upload</string>
<string name="channel">Channel</string>
<string name="videos">Videos</string>
<string name="channels">Channels</string>
<string name="yes">Yes</string>
<string name="no">No</string>
<string name="cancel">Cancel</string>
<string name="download">Download</string>
<string name="profile_picture">Profile picture</string>
<string name="update_video">Update video</string>
<string name="date_seconds">%d s</string>
<string name="date_minutes">%d m</string>
<string name="date_hours">%d h</string>
<string name="date_day">%d d</string>
<string name="number_view_video">%s views</string>
<string name="title_instance_login">Instance host</string>
<string name="uploading">Uploading, please wait…</string>
<string name="upload_video_success">The video has been uploaded!</string>
<string name="toast_cancelled">Upload cancelled!</string>
<string name="video_uploaded_action">Tap here to edit the video data.</string>
<string name="toot_select_image_error">An error occurred while selecting the media!</string>
<string name="download_file">Download %1$s</string>
<string name="action_privacy">Privacy</string>
<string name="action_logout">Logout</string>
<string name="login">Login</string>
<string name="password">Password</string>
<string name="email">Email</string>
<string name="tags">Tags</string>
<string name="validate">Validate</string>
<string name="share_with">Share with</string>
<string name="shared_via">Shared via TubeLab</string>
<string name="username">User name</string>
<string name="settings">Settings</string>
<string name="logout_account_confirmation">Are you sure you want to logout @%1$s@%2$s?</string>
<string name="following">Following</string>
<string name="followers">Followers</string>
<string name="client_error">Unable to get client id!</string>
<string name="toast_error_loading_account">An error occurred while switching between accounts!</string>
<string name="toast_error_search">An error occurred while searching!</string>
<string name="nothing_to_do">No action can be taken</string>
<string name="action_follow">Follow</string>
<string name="action_mute">Mute</string>
<string name="search">Search</string>
<string name="delete">Delete</string>
<string name="action_lists_confirm_delete">Are you sure you want to permanently delete this list?</string>
<string name="action_lists_delete">Delete list</string>
<string name="no_comments">Be the first to leave a comment on this video with the top right button!</string>
<string name="comment_no_allowed_peertube">Comments are not enabled on this video!</string>
<string name="pickup_resolution">Pick up a resolution</string>
<string name="bookmark_add_peertube">The video has been added to bookmarks!</string>
<string name="bookmark_remove_peertube">The video has been removed from bookmarks!</string>
<string name="information" tools:ignore="UnusedResources">Information</string>
<string name="app_logo">Logo of the application</string>
<!-- languages not translated -->
<string name="subscriptions">Subscriptions</string>
<string name="delete_comment">Delete a comment</string>
<string name="delete_comment_confirm">Are you sure to delete this comment?</string>
<string name="set_video_mode">Mode for videos</string>
<string name="my_videos">My videos</string>
<string name="title">Title</string>
<string name="license">License</string>
<string name="category">Category</string>
<string name="language">Language</string>
<string name="peertube_nsfw">This video contains mature or explicit content</string>
<string name="peertube_enable_comments">Enable video comments</string>
<string name="description">Description</string>
<string name="toast_peertube_video_updated">The video has been updated!</string>
<string name="register_account">Register an account</string>
<string name="email_address">Email address</string>
<string name="preview">Preview</string>
<string name="change_preview">Change preview</string>
<string name="name">Name</string>
<string name="display_more">Display more</string>
<string name="no_channels">No channels!</string>
<string name="report_helper">Some explanations about your report…</string>
<string name="report_video">Report video</string>
<string name="report">Report</string>
<string name="change_instance">Pickup another instance</string>
<string name="my_history">History</string>
<string name="edit">Edit</string>
<string name="set_video_mode_description">Allows to change mode for playing videos (default, streaming or via a browser).</string>
<string name="delete_video">Delete video</string>
<string name="delete_video_confirmation">Are you sure to delete this video?</string>
<string name="no_video_to_display">No videos to display!</string>
<string name="share">Share</string>
<string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> commented your video <b>%2$s</b>]]></string>
<string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> is following your channel <b>%2$s</b>]]></string>
<string name="peertube_follow_account"><![CDATA[<b>%1$s</b> is following your account]]></string>
<string name="peertube_video_published"><![CDATA[Your video <b>%1$s</b> has been published]]></string>
<string name="peertube_video_import_success"><![CDATA[Your video import <b>%1$s</b> succeeded]]></string>
<string name="peertube_video_import_error"><![CDATA[Your video import <b>%1$s</b> failed]]></string>
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> published a new video: <b>%2$s</b>]]></string>
<string name="peertube_video_blacklist"><![CDATA[Your video <b>%1$s</b> has been blacklisted]]></string>
<string name="peertube_video_unblacklist"><![CDATA[Your video <b>%1$s</b> has been unblacklisted]]></string>
<string name="add_public_comment">Add a public comment</string>
<string name="send_comment">Send comment</string>
<string name="all">All</string>
<!-- end languages -->
<string name="playlists">Playlists</string>
<string name="display_name">Display name</string>
<string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string>
<string name="error_display_name">You must provide a display name!</string>
<string name="error_channel_mandatory">The channel is required when the playlist is public.</string>
<string name="action_playlist_create">Create a playlist</string>
<string name="action_playlist_empty_content">There is nothing in this playlist yet.</string>
<string name="password_confirm">Confirm password</string>
<string name="agreement_check">I agree to %1$s and %2$s</string>
<string name="server_rules">server rules</string>
<string name="tos">terms of service</string>
<string name="sign_up">Sign up</string>
<string name="all_field_filled">Please, fill all the fields!</string>
<string name="password_error">Passwords don\'t match!</string>
<string name="email_error">The email doesn\'t seem to be valid!</string>
<string name="email_indicator">You will be sent a confirmation e-mail</string>
<string name="password_indicator">Use at least 8 characters</string>
<string name="password_too_short">Password should contain at least 8 characters</string>
<string name="username_error">Username should only contain letters, numbers and underscores</string>
<string name="account_created">Account created!</string>
<string name="account_created_message"> Your account has been created!\n\n
Think to validate your email within the 48 next hours.\n\n
You can now connect your account by writing <b>%1$s</b> in the first field and tap on <b>Connect</b>.\n\n
<b>Important</b>: If your instance required validation, you will receive an email once it is validated!
</string>
<string name="account">Account</string>
<string name="report_account">Report account</string>
<string-array name="settings_video_mode">
<item>Webview</item>
<item>Direct stream</item>
</string-array>
<string name="unfollow_confirm">Do you want to unfollow this account?</string>
<string name="title_video_peertube">Title for the video</string>
<string name="join_peertube">Join Peertube</string>
<string name="agreement_check_peertube">I am at least 16 years old and agree to the %1$s of this instance</string>
<string name="edit_profile">Edit profile</string>
<string name="make_an_action">Make an action</string>
<string name="action_unfollow">Unfollow</string>
<string name="display_nsfw_videos">Display sensitive videos</string>
<string name="fullscreen">Fullscreen</string>
<string name="bookmark_peertube_empty">There are no videos in your favourites!</string>
<string name="delete_channel">Remove channel</string>
<string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string>
<string name="no_muted">No muted accounts!</string>
<string name="error_display_name_channel">You must define a name and a display name for this channel!</string>
<string name="action_channel_create">Create a channel</string>
<string name="action_channel_edit">Edit channel</string>
<string name="email_error_domain">Email addresses in %1$s are not allowed!</string>
<string name="report_comment_size">Please, specify the reasons</string>
<string name="not_logged_in">You must be authenticated to proceed to this action!</string>
<string name="successful_report">The account has been reported!</string>
<string name="successful_video_report">The video has been reported!</string>
<string name="password_length_error">The password must contain at least 6 characters!</string>
<string name="muted_done">The account has been muted!</string>
<string name="edit_video">Edit video</string>
<string name="create_an_account">Create an account</string>
<string name="followers_count">%1$s Subscribers</string>
<string name="developer">Developer</string>
<string name="about_vesrion">Release %1$s</string>
<string name="about_the_app">About the app</string>
<string name="Donate">Donate</string>
<string name="source_code">Source code</string>
<string name="issue_tracker">Issue tracker</string>
<string name="action_instance_empty_content">No instances match these criteria</string>
<string name="instances_picker">Instances picker</string>
<string name="pickup_instance">Pickup this instance</string>
<string name="sensitive_video"> Sensitive videos</string>
<string name="sensitive_content">Sensitive content: %1$s</string>
<string name="followers_instance">%1$s followers instances</string>
<string name="help">Help</string>
<string name="pickup_categories">Pickup categories</string>
<string name="pickup_languages">Pickup languages</string>
<string name="notification_channel_name">Update information</string>
<string name="add_account">Add an account</string>
<string name="list_of_accounts">List of accounts</string>
</resources>

View File

@ -1,5 +1,41 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"> <resources xmlns:tools="http://schemas.android.com/tools">
<string name="set_video_in_list">Videos in list</string>
<string name="set_video_in_list_description">Change the layout for displaying videos in a list</string>
<string name="no_instances">No instances !</string>
<string name="show_more">Show more</string>
<string name="show_less">Show less</string>
<string name="set_play_screen_lock">Screen lock</string>
<string name="set_play_screen_lock_description">Keep playing videos when the screen is locked</string>
<string name="save">Save</string>
<string name="enable_history">Enable history</string>
<string name="change_profile_picture">Change profile picture</string>
<string name="set_autoplay">Automatic playback</string>
<string name="set_autoplay_description">If enabled, videos will be played automatically</string>
<string name="set_fullscreen">Fullscreen</string>
<string name="set_fullscreen_description">Automatically open videos in fullscreen</string>
<string name="set_autoplay_next_video">Automatically start playing the next video</string>
<string name="set_autoplay_next_video_description">When a video ends, follow up with the next suggested video.</string>
<string name="add_public_reply">Añade una respuesta pública</string>
<string name="activity">Activity</string>
<string name="app">App</string>
<string name="notif_new_video">New video from your subscriptions</string>
<string name="notif_new_comment">New comment on your video</string>
<string name="notif_blocked">One of your video is blocked/unblocked</string>
<string name="notif_video_published">Video published (after transcoding/scheduled update)</string>
<string name="notif_video_imported">Video import finished</string>
<string name="notif_new_followers">You or your channel(s) has a new follower</string>
<string name="notif_video_mention">Someone mentioned you in video comments</string>
<string name="notif_abuse_received">An abuse report received a new message</string>
<string name="notif_abuse_accepted">One of your abuse reports has been accepted or rejected by moderators</string>
<plurals name="number_of_replies">
<item quantity="one">%d respuesta</item>
<item quantity="other">%d respuestas</item>
</plurals>
<string name="reply">Respuesta</string>
<string name="set_theme">Tema</string>
<string name="set_theme_description">Permite cambiar el tema de la aplicación</string>
<string name="federation_issue">El video no puede ser federado!</string>
<string name="title_home">Inicio</string> <string name="title_home">Inicio</string>
<string name="title_local">Local</string> <string name="title_local">Local</string>
<string name="title_discover">Descubre</string> <string name="title_discover">Descubre</string>
@ -17,7 +53,7 @@
<string name="instance_choice">Selecciona una instancia</string> <string name="instance_choice">Selecciona una instancia</string>
<string name="not_valide_instance">¡Esta instancia no parece ser válida!</string> <string name="not_valide_instance">¡Esta instancia no parece ser válida!</string>
<string name="no_videos">¡Ningún vídeo!</string> <string name="no_videos">¡Ningún vídeo!</string>
<string name="no_notifications">No notifications!</string> <string name="no_notifications">No hay notificaciones!</string>
<string name="favicon">Favicon</string> <string name="favicon">Favicon</string>
<string name="open_with">Abrir con</string> <string name="open_with">Abrir con</string>
<string name="action_playlist_edit">Editar lista de reproducción</string> <string name="action_playlist_edit">Editar lista de reproducción</string>
@ -25,15 +61,32 @@
<string name="upload_video">Subir</string> <string name="upload_video">Subir</string>
<string name="image_preview">Previsualización de la imagen</string> <string name="image_preview">Previsualización de la imagen</string>
<string name="file_to_upload">Seleccione el archivo a subir</string> <string name="file_to_upload">Seleccione el archivo a subir</string>
<string name="new_video">New video</string>
<string name="new_blacklist">New blacklist info</string>
<string name="new_my_video_published">Your video is published</string>
<string name="new_my_video_error">Error when publishing your video</string>
<string name="new_comment">New comment</string>
<string name="new_follow">New follow</string>
<string name="channel">Canal</string> <string name="channel">Canal</string>
<string name="videos">Vídeos</string> <string name="videos">Vídeos</string>
<string name="channels">Canales</string> <string name="channels">Canales</string>
<string name="refresh_every">Fetch every:</string>
<string-array name="refresh_time">
<item>Never</item>
<item>15 minutes</item>
<item>30 minutes</item>
<item>1 hour</item>
<item>2 hours</item>
<item>6 hours</item>
<item>12 hours</item>
</string-array>
<string name="yes"></string> <string name="yes"></string>
<string name="no">No</string> <string name="no">No</string>
<string name="cancel">Cancelar</string> <string name="cancel">Cancelar</string>
<string name="download">Descargar</string> <string name="download">Descargar</string>
<string name="profile_picture">Imagen del perfil</string> <string name="profile_picture">Imagen del perfil</string>
<string name="update_video">Actualizar vídeo</string> <string name="update_video">Actualizar vídeo</string>
<string name="remove_from_playlist">Eliminar de la lista de reproducción</string>
<string name="date_seconds">%d s</string> <string name="date_seconds">%d s</string>
<string name="date_minutes">%d m</string> <string name="date_minutes">%d m</string>
<string name="date_hours">%d h</string> <string name="date_hours">%d h</string>
@ -46,6 +99,7 @@
<string name="video_uploaded_action">Pulsa aquí para editar los datos del vídeo.</string> <string name="video_uploaded_action">Pulsa aquí para editar los datos del vídeo.</string>
<string name="toot_select_image_error">¡Ocurrió un error al seleccionar la imagen!</string> <string name="toot_select_image_error">¡Ocurrió un error al seleccionar la imagen!</string>
<string name="download_file">Descargando %1$s</string> <string name="download_file">Descargando %1$s</string>
<string name="account_updated">The account has been updated!</string>
<string name="action_privacy">Privacidad</string> <string name="action_privacy">Privacidad</string>
<string name="action_logout">Cerrar sesión</string> <string name="action_logout">Cerrar sesión</string>
<string name="login">Iniciar sesión</string> <string name="login">Iniciar sesión</string>
@ -79,9 +133,38 @@
<string name="app_logo">Logo de la aplicación</string> <string name="app_logo">Logo de la aplicación</string>
<!-- languages not translated --> <!-- languages not translated -->
<string name="subscriptions">Suscripciones</string> <string name="subscriptions">Suscripciones</string>
<string name="delete_instance">Delete an instance</string>
<string name="delete_instance_confirm">Are you sure to delete this instance?</string>
<string name="delete_comment">Eliminar un comentario</string> <string name="delete_comment">Eliminar un comentario</string>
<string name="delete_comment_confirm">¿Realmente deseas eliminar este comentario?</string> <string name="delete_comment_confirm">¿Realmente deseas eliminar este comentario?</string>
<string name="set_video_mode">Aplicar el modo de video</string> <string name="set_video_mode">Aplicar el modo de video</string>
<string name="filter">Filtro</string>
<string name="sepia_search">Búsqueda de sepia</string>
<string name="sepia_element_nsfw">Mostrar el contenido sensible</string>
<string name="sepia_element_published_date">Fecha publicada</string>
<string name="any">Cualquier</string>
<string name="today">Hoy</string>
<string name="last_7_days">Los últimos 7 días</string>
<string name="last_30_days">Los últimos 30 días</string>
<string name="last_365_days">Los últimos 365 días</string>
<string name="sepia_element_duration">Duración</string>
<string name="duration_short"><![CDATA[Corto (<4 min)]]></string>
<string name="duration_medium"><![CDATA[Medio (4-10 min)]]></string>
<string name="duration_long"><![CDATA[Largo (> 10 min)]]></string>
<string name="display_all_categories">Mostrar todas las categorías</string>
<string name="display_all_licenses">Mostrar todas las licencias</string>
<string name="display_all_languages">Mostrar todos los idiomas</string>
<string name="all_of_these_tags">Todas estas etiquetas</string>
<string name="one_of_these_tags">Una de estas etiquetas</string>
<string name="apply_filter">Aplicar el filtro</string>
<string-array name="sort_by_array">
<item>El mejor partido</item>
<item>El más reciente</item>
<item>Menos reciente</item>
</string-array>
<string name="sort_by">Ordenar por</string>
<string name="sepia_search_hint">Palabra clave, canal, video, etc.</string>
<string name="sepia_indication">Sepia Search muestra vídeos y canales que coinciden con tu búsqueda, pero no es el editor, ni el propietario. Si nota algún problema con un vídeo, repórtelo a los administradores en el sitio web de PeerTube donde se publique el vídeo.</string>
<string name="my_videos">Mis videos</string> <string name="my_videos">Mis videos</string>
<string name="title">Título</string> <string name="title">Título</string>
<string name="license">Licencia</string> <string name="license">Licencia</string>
@ -104,17 +187,19 @@
<string name="change_instance">Selecciona otra instancia</string> <string name="change_instance">Selecciona otra instancia</string>
<string name="my_history">Historia</string> <string name="my_history">Historia</string>
<string name="edit">Editar</string> <string name="edit">Editar</string>
<string name="video_settings">Video settings</string> <string name="video_settings">Ajustes de video</string>
<string name="app_interface">Interface</string> <string name="app_interface">Interfaz</string>
<string name="set_cache_mode">Cache</string> <string name="set_cache_mode">Cacheo</string>
<string name="set_video_cache_description">Définir le cache pour les vidéos (défaut 100Mo)</string> <string name="set_video_cache_description">Configurar la caché para los vídeos (por defecto 100Mb)</string>
<string name="set_video_quality_description">Define a default quality for videos</string> <string name="set_video_quality_description">Definir una calidad predeterminada para los videos</string>
<string name="set_quality_mode">Resolution for videos</string> <string name="set_quality_mode">Resolución para los videos</string>
<string name="video_cache_value">Video cache: %d Mb</string> <string name="video_cache_value">Video caché: %d Mb</string>
<string name="captions">Subtítulos</string> <string name="captions">Subtítulos</string>
<string name="pickup_captions">Pies de foto de la camioneta</string> <string name="pickup_captions">Pies de foto de la camioneta</string>
<string name="none">Ninguno</string> <string name="none">Ninguno</string>
<string name="set_video_mode_description">Permite cambiar el modo de reproducción de los vídeos (predeterminado, streaming o a través de un navegador).</string> <string name="set_video_mode_description">Permite cambiar el modo de reproducción de los vídeos (predeterminado, streaming o a través de un navegador).</string>
<string name="delete_account_comment">Eliminar los comentarios de la cuenta</string>
<string name="delete_account_comment_confirm">Estás seguro de que quieres eliminar todos los comentarios de esta cuenta?</string>
<string name="delete_video">Eliminar vídeo</string> <string name="delete_video">Eliminar vídeo</string>
<string name="delete_video_confirmation">¿Estás seguro de eliminar este video?</string> <string name="delete_video_confirmation">¿Estás seguro de eliminar este video?</string>
<string name="no_video_to_display">¡No hay videos para ver!</string> <string name="no_video_to_display">¡No hay videos para ver!</string>
@ -128,12 +213,22 @@
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> publicó un nuevo video: <b>%2$s</b>]]></string> <string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> publicó un nuevo video: <b>%2$s</b>]]></string>
<string name="peertube_video_blacklist"><![CDATA[Su video <b>%1$s</b> esta en lista negra]]></string> <string name="peertube_video_blacklist"><![CDATA[Su video <b>%1$s</b> esta en lista negra]]></string>
<string name="peertube_video_unblacklist"><![CDATA[Tu video <b>%1$s</b> non más esta en lista negra]]></string> <string name="peertube_video_unblacklist"><![CDATA[Tu video <b>%1$s</b> non más esta en lista negra]]></string>
<string name="peertube_video_abuse"><![CDATA[New abuse report for video: <b>%1$s</b>]]></string> <string name="peertube_video_report_success"><![CDATA[Your abuse report <b>%1$s</b> has been accepted]]></string>
<string name="peertube_video_abuse"><![CDATA[Nuevo informe de abuso para vídeo: <b>%1$s</b>]]></string>
<string name="add_public_comment">Añade un comentario público</string> <string name="add_public_comment">Añade un comentario público</string>
<string name="send_comment">Enviar comentario</string> <string name="send_comment">Enviar comentario</string>
<string name="all">Todo</string> <string name="all">Todo</string>
<!-- end languages --> <!-- end languages -->
<string name="delete_history">Delete videos history</string>
<string name="delete_history_confirm">Are you sure you want to delete all your videos history?</string>
<string name="export_list">Export</string>
<string name="import_list">Import</string>
<string name="export_notification_title">Successful export!</string>
<string name="export_notification_content">Tap here to send the export by email</string>
<string name="export_notification_subjet">New Playlist</string>
<string name="export_notification_body">Open the attached file with TubeLab</string>
<string name="playlists">Listas de reproducción</string> <string name="playlists">Listas de reproducción</string>
<string name="no_playlist">No playlists</string>
<string name="display_name">Nombre para mostrar</string> <string name="display_name">Nombre para mostrar</string>
<string name="action_playlist_add">No tienes ninguna lista de reproducción. Pulsa en el icono \"+\" para añadir una nueva lista</string> <string name="action_playlist_add">No tienes ninguna lista de reproducción. Pulsa en el icono \"+\" para añadir una nueva lista</string>
<string name="error_display_name">¡Debe proporcionar un nombre para mostrar!</string> <string name="error_display_name">¡Debe proporcionar un nombre para mostrar!</string>
@ -163,11 +258,18 @@
<string-array name="settings_video_mode"> <string-array name="settings_video_mode">
<item>Webview</item> <item>Webview</item>
<item>Corriente Directa</item> <item>Corriente Directa</item>
<item>Magnet</item>
<item>Torrent</item>
</string-array>
<string-array name="settings_theme">
<item>Luz</item>
<item>Dark</item>
<item>Automático</item>
</string-array> </string-array>
<string-array name="settings_video_quality"> <string-array name="settings_video_quality">
<item>High</item> <item>Alto</item>
<item>Medium</item> <item>Medio</item>
<item>Low</item> <item>Bajo</item>
</string-array> </string-array>
<string name="unfollow_confirm">Quieres seguir esta cuenta?</string> <string name="unfollow_confirm">Quieres seguir esta cuenta?</string>
<string name="title_video_peertube">Título del video</string> <string name="title_video_peertube">Título del video</string>
@ -181,6 +283,7 @@
<string name="bookmark_peertube_empty">No hay videos en tus favoritos!</string> <string name="bookmark_peertube_empty">No hay videos en tus favoritos!</string>
<string name="delete_channel">Quitar el canal</string> <string name="delete_channel">Quitar el canal</string>
<string name="action_channel_confirm_delete">Estas seguro de borrar permanentemente este canal?</string> <string name="action_channel_confirm_delete">Estas seguro de borrar permanentemente este canal?</string>
<string name="modify_playlists">Vídeo en las listas de reproducción</string>
<string name="no_muted">Nada de cuentas mutables!</string> <string name="no_muted">Nada de cuentas mutables!</string>
<string name="error_display_name_channel">Debes definir un nombre y un nombre de pantalla para este canal!</string> <string name="error_display_name_channel">Debes definir un nombre y un nombre de pantalla para este canal!</string>
<string name="action_channel_create">Crear un canal</string> <string name="action_channel_create">Crear un canal</string>
@ -189,7 +292,7 @@
<string name="report_comment_size">Por favor, especifique las razones</string> <string name="report_comment_size">Por favor, especifique las razones</string>
<string name="not_logged_in">¡Debe ser autentificado para proceder a esta acción!</string> <string name="not_logged_in">¡Debe ser autentificado para proceder a esta acción!</string>
<string name="successful_report">La cuenta ha sido reportada!</string> <string name="successful_report">La cuenta ha sido reportada!</string>
<string name="successful_report_comment">The comment has been reported!</string> <string name="successful_report_comment">El comentario ha sido reportado!</string>
<string name="successful_video_report">El video ha sido reportado!</string> <string name="successful_video_report">El video ha sido reportado!</string>
<string name="password_length_error">La contraseña debe contener al menos 6 caracteres!</string> <string name="password_length_error">La contraseña debe contener al menos 6 caracteres!</string>
<string name="muted_done">La cuenta ha sido silenciada!</string> <string name="muted_done">La cuenta ha sido silenciada!</string>
@ -212,6 +315,7 @@
<string name="pickup_categories">Selecciona una o más categorías</string> <string name="pickup_categories">Selecciona una o más categorías</string>
<string name="pickup_languages">Selecciona uno o más idiomas</string> <string name="pickup_languages">Selecciona uno o más idiomas</string>
<string name="notification_channel_name">Actualizar la información</string> <string name="notification_channel_name">Actualizar la información</string>
<string name="fetch_notification_channel_name">Fetch notifications</string>
<string name="add_account">Añadir una cuenta</string> <string name="add_account">Añadir una cuenta</string>
<string name="list_of_accounts">Lista de cuentas</string> <string name="list_of_accounts">Lista de cuentas</string>
<string name="pause">Pausa</string> <string name="pause">Pausa</string>

View File

@ -1,198 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="title_home">Home</string>
<string name="title_discover">Discover</string>
<string name="title_notifications">Notifications</string>
<string name="title_recently_added">Recently added</string>
<string name="title_trending">Trending</string>
<string name="title_most_liked">Most liked</string>
<string name="toast_error">Oops! An error occurred!</string>
<string name="title_muted">Muted</string>
<string name="title_channel">Channels</string>
<string name="do_not_list">Do not list</string>
<string name="blur">Blur</string>
<string name="display">Display</string>
<string name="no_opinion">No opinion</string>
<string name="instance_choice">Pickup an instance</string>
<string name="not_valide_instance">This instance does not seem to be valid!</string>
<string name="no_videos">No videos!</string>
<string name="favicon">Favicon</string>
<string name="open_with">Open with</string>
<string name="action_playlist_edit">Edit a playlist</string>
<string name="close">Close</string>
<string name="upload_video">Upload</string>
<string name="image_preview">Image preview</string>
<string name="file_to_upload">Select the file to upload</string>
<string name="channel">Channel</string>
<string name="videos">Videos</string>
<string name="channels">Channels</string>
<string name="yes">Yes</string>
<string name="no">No</string>
<string name="cancel">Cancel</string>
<string name="download">Download</string>
<string name="profile_picture">Profile picture</string>
<string name="update_video">Update video</string>
<string name="date_seconds">%d s</string>
<string name="date_minutes">%d m</string>
<string name="date_hours">%d h</string>
<string name="date_day">%d d</string>
<string name="number_view_video">%s views</string>
<string name="title_instance_login">Instance host</string>
<string name="uploading">Uploading, please wait…</string>
<string name="upload_video_success">The video has been uploaded!</string>
<string name="toast_cancelled">Upload cancelled!</string>
<string name="video_uploaded_action">Tap here to edit the video data.</string>
<string name="toot_select_image_error">An error occurred while selecting the media!</string>
<string name="download_file">Download %1$s</string>
<string name="action_privacy">Privacy</string>
<string name="action_logout">Logout</string>
<string name="login">Login</string>
<string name="password">Password</string>
<string name="email">Email</string>
<string name="tags">Tags</string>
<string name="validate">Validate</string>
<string name="share_with">Share with</string>
<string name="shared_via">Shared via TubeLab</string>
<string name="username">User name</string>
<string name="settings">Settings</string>
<string name="logout_account_confirmation">Are you sure you want to logout @%1$s@%2$s?</string>
<string name="following">Following</string>
<string name="followers">Followers</string>
<string name="client_error">Unable to get client id!</string>
<string name="toast_error_loading_account">An error occurred while switching between accounts!</string>
<string name="toast_error_search">An error occurred while searching!</string>
<string name="nothing_to_do">No action can be taken</string>
<string name="action_follow">Follow</string>
<string name="action_mute">Mute</string>
<string name="search">Search</string>
<string name="delete">Delete</string>
<string name="action_lists_confirm_delete">Are you sure you want to permanently delete this list?</string>
<string name="action_lists_delete">Delete list</string>
<string name="no_comments">Be the first to leave a comment on this video with the top right button!</string>
<string name="comment_no_allowed_peertube">Comments are not enabled on this video!</string>
<string name="pickup_resolution">Pick up a resolution</string>
<string name="bookmark_add_peertube">The video has been added to bookmarks!</string>
<string name="bookmark_remove_peertube">The video has been removed from bookmarks!</string>
<string name="information" tools:ignore="UnusedResources">Information</string>
<string name="app_logo">Logo of the application</string>
<!-- languages not translated -->
<string name="subscriptions">Subscriptions</string>
<string name="delete_comment">Delete a comment</string>
<string name="delete_comment_confirm">Are you sure to delete this comment?</string>
<string name="set_video_mode">Mode for videos</string>
<string name="my_videos">My videos</string>
<string name="title">Title</string>
<string name="license">License</string>
<string name="category">Category</string>
<string name="language">Language</string>
<string name="peertube_nsfw">This video contains mature or explicit content</string>
<string name="peertube_enable_comments">Enable video comments</string>
<string name="description">Description</string>
<string name="toast_peertube_video_updated">The video has been updated!</string>
<string name="register_account">Register an account</string>
<string name="email_address">Email address</string>
<string name="preview">Preview</string>
<string name="change_preview">Change preview</string>
<string name="name">Name</string>
<string name="display_more">Display more</string>
<string name="no_channels">No channels!</string>
<string name="report_helper">Some explanations about your report…</string>
<string name="report_video">Report video</string>
<string name="report">Report</string>
<string name="change_instance">Pickup another instance</string>
<string name="my_history">History</string>
<string name="edit">Edit</string>
<string name="set_video_mode_description">Allows to change mode for playing videos (default, streaming or via a browser).</string>
<string name="delete_video">Delete video</string>
<string name="delete_video_confirmation">Are you sure to delete this video?</string>
<string name="no_video_to_display">No videos to display!</string>
<string name="share">Share</string>
<string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> commented your video <b>%2$s</b>]]></string>
<string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> is following your channel <b>%2$s</b>]]></string>
<string name="peertube_follow_account"><![CDATA[<b>%1$s</b> is following your account]]></string>
<string name="peertube_video_published"><![CDATA[Your video <b>%1$s</b> has been published]]></string>
<string name="peertube_video_import_success"><![CDATA[Your video import <b>%1$s</b> succeeded]]></string>
<string name="peertube_video_import_error"><![CDATA[Your video import <b>%1$s</b> failed]]></string>
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> published a new video: <b>%2$s</b>]]></string>
<string name="peertube_video_blacklist"><![CDATA[Your video <b>%1$s</b> has been blacklisted]]></string>
<string name="peertube_video_unblacklist"><![CDATA[Your video <b>%1$s</b> has been unblacklisted]]></string>
<string name="add_public_comment">Add a public comment</string>
<string name="send_comment">Send comment</string>
<string name="all">All</string>
<!-- end languages -->
<string name="playlists">Playlists</string>
<string name="display_name">Display name</string>
<string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string>
<string name="error_display_name">You must provide a display name!</string>
<string name="error_channel_mandatory">The channel is required when the playlist is public.</string>
<string name="action_playlist_create">Create a playlist</string>
<string name="action_playlist_empty_content">There is nothing in this playlist yet.</string>
<string name="password_confirm">Confirm password</string>
<string name="agreement_check">I agree to %1$s and %2$s</string>
<string name="server_rules">server rules</string>
<string name="tos">terms of service</string>
<string name="sign_up">Sign up</string>
<string name="all_field_filled">Please, fill all the fields!</string>
<string name="password_error">Passwords don\'t match!</string>
<string name="email_error">The email doesn\'t seem to be valid!</string>
<string name="email_indicator">You will be sent a confirmation e-mail</string>
<string name="password_indicator">Use at least 8 characters</string>
<string name="password_too_short">Password should contain at least 8 characters</string>
<string name="username_error">Username should only contain letters, numbers and underscores</string>
<string name="account_created">Account created!</string>
<string name="account_created_message"> Your account has been created!\n\n
Think to validate your email within the 48 next hours.\n\n
You can now connect your account by writing <b>%1$s</b> in the first field and tap on <b>Connect</b>.\n\n
<b>Important</b>: If your instance required validation, you will receive an email once it is validated!
</string>
<string name="account">Account</string>
<string name="report_account">Report account</string>
<string-array name="settings_video_mode">
<item>Webview</item>
<item>Direct stream</item>
</string-array>
<string name="unfollow_confirm">Do you want to unfollow this account?</string>
<string name="title_video_peertube">Title for the video</string>
<string name="join_peertube">Join Peertube</string>
<string name="agreement_check_peertube">I am at least 16 years old and agree to the %1$s of this instance</string>
<string name="edit_profile">Edit profile</string>
<string name="make_an_action">Make an action</string>
<string name="action_unfollow">Unfollow</string>
<string name="display_nsfw_videos">Display sensitive videos</string>
<string name="fullscreen">Fullscreen</string>
<string name="bookmark_peertube_empty">There are no videos in your favourites!</string>
<string name="delete_channel">Remove channel</string>
<string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string>
<string name="no_muted">No muted accounts!</string>
<string name="error_display_name_channel">You must define a name and a display name for this channel!</string>
<string name="action_channel_create">Create a channel</string>
<string name="action_channel_edit">Edit channel</string>
<string name="email_error_domain">Email addresses in %1$s are not allowed!</string>
<string name="report_comment_size">Please, specify the reasons</string>
<string name="not_logged_in">You must be authenticated to proceed to this action!</string>
<string name="successful_report">The account has been reported!</string>
<string name="successful_video_report">The video has been reported!</string>
<string name="password_length_error">The password must contain at least 6 characters!</string>
<string name="muted_done">The account has been muted!</string>
<string name="edit_video">Edit video</string>
<string name="create_an_account">Create an account</string>
<string name="followers_count">%1$s Subscribers</string>
<string name="developer">Developer</string>
<string name="about_vesrion">Release %1$s</string>
<string name="about_the_app">About the app</string>
<string name="Donate">Donate</string>
<string name="source_code">Source code</string>
<string name="issue_tracker">Issue tracker</string>
<string name="action_instance_empty_content">No instances match these criteria</string>
<string name="instances_picker">Instances picker</string>
<string name="pickup_instance">Pickup this instance</string>
<string name="sensitive_video"> Sensitive videos</string>
<string name="sensitive_content">Sensitive content: %1$s</string>
<string name="followers_instance">%1$s followers instances</string>
<string name="help">Help</string>
<string name="pickup_categories">Pickup categories</string>
<string name="pickup_languages">Pickup languages</string>
<string name="notification_channel_name">Update information</string>
<string name="add_account">Add an account</string>
<string name="list_of_accounts">List of accounts</string>
</resources>

View File

@ -1,7 +1,43 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"> <resources xmlns:tools="http://schemas.android.com/tools">
<string name="set_video_in_list">Videos in list</string>
<string name="set_video_in_list_description">Change the layout for displaying videos in a list</string>
<string name="no_instances">No instances !</string>
<string name="show_more">Show more</string>
<string name="show_less">Show less</string>
<string name="set_play_screen_lock">Screen lock</string>
<string name="set_play_screen_lock_description">Keep playing videos when the screen is locked</string>
<string name="save">Save</string>
<string name="enable_history">Enable history</string>
<string name="change_profile_picture">Change profile picture</string>
<string name="set_autoplay">Automatic playback</string>
<string name="set_autoplay_description">If enabled, videos will be played automatically</string>
<string name="set_fullscreen">Fullscreen</string>
<string name="set_fullscreen_description">Automatically open videos in fullscreen</string>
<string name="set_autoplay_next_video">Automatically start playing the next video</string>
<string name="set_autoplay_next_video_description">When a video ends, follow up with the next suggested video.</string>
<string name="add_public_reply">Ajouter une réponse publique</string>
<string name="activity">Activity</string>
<string name="app">App</string>
<string name="notif_new_video">New video from your subscriptions</string>
<string name="notif_new_comment">New comment on your video</string>
<string name="notif_blocked">One of your video is blocked/unblocked</string>
<string name="notif_video_published">Video published (after transcoding/scheduled update)</string>
<string name="notif_video_imported">Video import finished</string>
<string name="notif_new_followers">You or your channel(s) has a new follower</string>
<string name="notif_video_mention">Someone mentioned you in video comments</string>
<string name="notif_abuse_received">An abuse report received a new message</string>
<string name="notif_abuse_accepted">One of your abuse reports has been accepted or rejected by moderators</string>
<plurals name="number_of_replies">
<item quantity="one">%d réponse</item>
<item quantity="other">%d réponses</item>
</plurals>
<string name="reply">Réponse</string>
<string name="set_theme">Thème</string>
<string name="set_theme_description">Permet de changer le thème de l\'application</string>
<string name="federation_issue">La vidéo ne peut pas être fédérée !</string>
<string name="title_home">Locale</string> <string name="title_home">Locale</string>
<string name="title_local">Local</string> <string name="title_local">Locale</string>
<string name="title_discover">Découvrir</string> <string name="title_discover">Découvrir</string>
<string name="title_notifications">Notifications</string> <string name="title_notifications">Notifications</string>
<string name="title_recently_added">Nouveautés</string> <string name="title_recently_added">Nouveautés</string>
@ -25,15 +61,32 @@
<string name="upload_video">Téléverser</string> <string name="upload_video">Téléverser</string>
<string name="image_preview">Aperçu de l\'image</string> <string name="image_preview">Aperçu de l\'image</string>
<string name="file_to_upload">Sélectionnez un fichier à transférer</string> <string name="file_to_upload">Sélectionnez un fichier à transférer</string>
<string name="new_video">New video</string>
<string name="new_blacklist">New blacklist info</string>
<string name="new_my_video_published">Your video is published</string>
<string name="new_my_video_error">Error when publishing your video</string>
<string name="new_comment">New comment</string>
<string name="new_follow">New follow</string>
<string name="channel">Chaîne</string> <string name="channel">Chaîne</string>
<string name="videos">Vidéos</string> <string name="videos">Vidéos</string>
<string name="channels">Chaînes</string> <string name="channels">Chaînes</string>
<string name="refresh_every">Fetch every:</string>
<string-array name="refresh_time">
<item>Never</item>
<item>15 minutes</item>
<item>30 minutes</item>
<item>1 hour</item>
<item>2 hours</item>
<item>6 hours</item>
<item>12 hours</item>
</string-array>
<string name="yes">Oui</string> <string name="yes">Oui</string>
<string name="no">Non</string> <string name="no">Non</string>
<string name="cancel">Annuler</string> <string name="cancel">Annuler</string>
<string name="download">Télécharger</string> <string name="download">Télécharger</string>
<string name="profile_picture">Photo du profil</string> <string name="profile_picture">Photo du profil</string>
<string name="update_video">Mettre à jour la vidéo</string> <string name="update_video">Mettre à jour la vidéo</string>
<string name="remove_from_playlist">Supprimer de la liste de lecture</string>
<string name="date_seconds">%d s</string> <string name="date_seconds">%d s</string>
<string name="date_minutes">%d min</string> <string name="date_minutes">%d min</string>
<string name="date_hours">%d h</string> <string name="date_hours">%d h</string>
@ -46,6 +99,7 @@
<string name="video_uploaded_action">Cliquez ici pour éditer les données de la vidéo.</string> <string name="video_uploaded_action">Cliquez ici pour éditer les données de la vidéo.</string>
<string name="toot_select_image_error">Une erreur sest produite lors de la sélection du média!</string> <string name="toot_select_image_error">Une erreur sest produite lors de la sélection du média!</string>
<string name="download_file">Télécharger %1$s</string> <string name="download_file">Télécharger %1$s</string>
<string name="account_updated">The account has been updated!</string>
<string name="action_privacy">Confidentialité</string> <string name="action_privacy">Confidentialité</string>
<string name="action_logout">Déconnexion</string> <string name="action_logout">Déconnexion</string>
<string name="login">Connexion</string> <string name="login">Connexion</string>
@ -79,9 +133,38 @@
<string name="app_logo">Logo de lapplication</string> <string name="app_logo">Logo de lapplication</string>
<!-- languages not translated --> <!-- languages not translated -->
<string name="subscriptions">Abonnements</string> <string name="subscriptions">Abonnements</string>
<string name="delete_instance">Delete an instance</string>
<string name="delete_instance_confirm">Are you sure to delete this instance?</string>
<string name="delete_comment">Supprimer le commentaire</string> <string name="delete_comment">Supprimer le commentaire</string>
<string name="delete_comment_confirm">Etes-vous sûr de vouloir supprimer ce commentaire ?</string> <string name="delete_comment_confirm">Etes-vous sûr de vouloir supprimer ce commentaire ?</string>
<string name="set_video_mode">Mode pour les vidéos</string> <string name="set_video_mode">Mode pour les vidéos</string>
<string name="filter">Filtrer</string>
<string name="sepia_search">Recherche sépia</string>
<string name="sepia_element_nsfw">Afficher le contenu sensible</string>
<string name="sepia_element_published_date">Date de publication</string>
<string name="any">Toutes</string>
<string name="today">Aujourd\'hui</string>
<string name="last_7_days">Les 7 derniers jours</string>
<string name="last_30_days">Les 30 derniers jours</string>
<string name="last_365_days">Les 365 derniers jours</string>
<string name="sepia_element_duration">Durée</string>
<string name="duration_short"><![CDATA[Courte (<4 min)]]></string>
<string name="duration_medium"><![CDATA[Moyenne (4-10 min)]]></string>
<string name="duration_long"><![CDATA[Longue (> 10 min)]]></string>
<string name="display_all_categories">Afficher toutes les catégories</string>
<string name="display_all_licenses">Afficher toutes les licences</string>
<string name="display_all_languages">Afficher toutes les langues</string>
<string name="all_of_these_tags">Tous ces labels</string>
<string name="one_of_these_tags">Un de ces labels</string>
<string name="apply_filter">Appliquer le filtre</string>
<string-array name="sort_by_array">
<item>Meilleurs résultats</item>
<item>Les plus récentes</item>
<item>Les moins récentes</item>
</string-array>
<string name="sort_by">Trier par</string>
<string name="sepia_search_hint">Mot-clé, chaîne, vidéo, etc.</string>
<string name="sepia_indication">La recherche Sepia affiche les vidéos et les chaînes qui correspondent à votre recherche mais qui n\'est pas l\'éditeur, ni le propriétaire. Si vous remarquez des problèmes avec une vidéo, signalez-la aux administrateurs sur le site Web de PeerTube où la vidéo est publiée.</string>
<string name="my_videos">Mes vidéos</string> <string name="my_videos">Mes vidéos</string>
<string name="title">Titre</string> <string name="title">Titre</string>
<string name="license">Licence</string> <string name="license">Licence</string>
@ -104,17 +187,19 @@
<string name="change_instance">Changer d\'instance</string> <string name="change_instance">Changer d\'instance</string>
<string name="my_history">Historique</string> <string name="my_history">Historique</string>
<string name="edit">Modifier</string> <string name="edit">Modifier</string>
<string name="video_settings">Video settings</string> <string name="video_settings">Réglages des vidéos</string>
<string name="app_interface">Interface</string> <string name="app_interface">Interface</string>
<string name="set_cache_mode">Cache</string> <string name="set_cache_mode">Cache</string>
<string name="set_video_cache_description">Définir le cache pour les vidéos (défaut 100Mo)</string> <string name="set_video_cache_description">Définir le cache pour les vidéos (par défaut 100Mo)</string>
<string name="set_video_quality_description">Define a default quality for videos</string> <string name="set_video_quality_description">Définir une qualité par défaut pour les vidéos</string>
<string name="set_quality_mode">Resolution for videos</string> <string name="set_quality_mode">Résolution pour les vidéos</string>
<string name="video_cache_value">Video cache: %d Mb</string> <string name="video_cache_value">Cache vidéo : %d Mo</string>
<string name="captions">Légendes</string> <string name="captions">Légendes</string>
<string name="pickup_captions">Options d\'envoi</string> <string name="pickup_captions">Options d\'envoi</string>
<string name="none">Aucune</string> <string name="none">Aucune</string>
<string name="set_video_mode_description">Permet de changer le mode de lecture pour les vidéos (normal, streaming ou via un navigateur).</string> <string name="set_video_mode_description">Permet de changer le mode de lecture pour les vidéos (normal, streaming ou via un navigateur).</string>
<string name="delete_account_comment">Supprimer les commentaires du compte</string>
<string name="delete_account_comment_confirm">Êtes-vous sûr de vouloir supprimer tous les commentaires de ce compte ?</string>
<string name="delete_video">Supprimer la vidéo</string> <string name="delete_video">Supprimer la vidéo</string>
<string name="delete_video_confirmation">Êtes-vous sûr de vouloir supprimer cette vidéo ?</string> <string name="delete_video_confirmation">Êtes-vous sûr de vouloir supprimer cette vidéo ?</string>
<string name="no_video_to_display">Aucune vidéo nest disponible !</string> <string name="no_video_to_display">Aucune vidéo nest disponible !</string>
@ -128,12 +213,22 @@
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> a publié une nouvelle vidéo : <b>%2$s</b>]]></string> <string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> a publié une nouvelle vidéo : <b>%2$s</b>]]></string>
<string name="peertube_video_blacklist"><![CDATA[Votre vidéo <b>%1$s</b> a été blacklisté]]></string> <string name="peertube_video_blacklist"><![CDATA[Votre vidéo <b>%1$s</b> a été blacklisté]]></string>
<string name="peertube_video_unblacklist"><![CDATA[Votre vidéo <b>%1$s</b> nest plus blacklisté]]></string> <string name="peertube_video_unblacklist"><![CDATA[Votre vidéo <b>%1$s</b> nest plus blacklisté]]></string>
<string name="peertube_video_abuse"><![CDATA[New abuse report for video: <b>%1$s</b>]]></string> <string name="peertube_video_report_success"><![CDATA[Your abuse report <b>%1$s</b> has been accepted]]></string>
<string name="peertube_video_abuse"><![CDATA[Nouveau signalement pour la vidéo : <b>%1$s</b>]]></string>
<string name="add_public_comment">Ajouter un commentaire public</string> <string name="add_public_comment">Ajouter un commentaire public</string>
<string name="send_comment">Envoyer un commentaire</string> <string name="send_comment">Envoyer un commentaire</string>
<string name="all">Tout</string> <string name="all">Tout</string>
<!-- end languages --> <!-- end languages -->
<string name="delete_history">Delete videos history</string>
<string name="delete_history_confirm">Are you sure you want to delete all your videos history?</string>
<string name="export_list">Export</string>
<string name="import_list">Import</string>
<string name="export_notification_title">Successful export!</string>
<string name="export_notification_content">Tap here to send the export by email</string>
<string name="export_notification_subjet">New Playlist</string>
<string name="export_notification_body">Open the attached file with TubeLab</string>
<string name="playlists">Listes de lecture</string> <string name="playlists">Listes de lecture</string>
<string name="no_playlist">No playlists</string>
<string name="display_name">Nom d\'affichage</string> <string name="display_name">Nom d\'affichage</string>
<string name="action_playlist_add">Vous n\'avez aucune liste de lecture. Cliquez sur l\'icône « + » pour en ajouter une</string> <string name="action_playlist_add">Vous n\'avez aucune liste de lecture. Cliquez sur l\'icône « + » pour en ajouter une</string>
<string name="error_display_name">Vous devez fournir un nom d\'affichage !</string> <string name="error_display_name">Vous devez fournir un nom d\'affichage !</string>
@ -159,11 +254,18 @@
<string-array name="settings_video_mode"> <string-array name="settings_video_mode">
<item>Normal</item> <item>Normal</item>
<item>Streaming</item> <item>Streaming</item>
<item>Magnet</item>
<item>Torrent</item>
</string-array>
<string-array name="settings_theme">
<item>Lumière</item>
<item>Foncé</item>
<item>Automatique</item>
</string-array> </string-array>
<string-array name="settings_video_quality"> <string-array name="settings_video_quality">
<item>High</item> <item>Élevée</item>
<item>Medium</item> <item>Moyenne</item>
<item>Low</item> <item>Faible</item>
</string-array> </string-array>
<string name="unfollow_confirm">Voulez-vous vous désabonner de ce compte ?</string> <string name="unfollow_confirm">Voulez-vous vous désabonner de ce compte ?</string>
<string name="title_video_peertube">Titre de la vidéo</string> <string name="title_video_peertube">Titre de la vidéo</string>
@ -177,6 +279,7 @@
<string name="bookmark_peertube_empty">Il ny a aucune vidéo Peertube dans vos favoris !</string> <string name="bookmark_peertube_empty">Il ny a aucune vidéo Peertube dans vos favoris !</string>
<string name="delete_channel">Supprimer la chaîne</string> <string name="delete_channel">Supprimer la chaîne</string>
<string name="action_channel_confirm_delete">Êtes-vous sûr de vouloir supprimer définitivement cette chaîne ?</string> <string name="action_channel_confirm_delete">Êtes-vous sûr de vouloir supprimer définitivement cette chaîne ?</string>
<string name="modify_playlists">Vidéo dans les listes de lecture</string>
<string name="no_muted">Aucun compte en sourdine !</string> <string name="no_muted">Aucun compte en sourdine !</string>
<string name="error_display_name_channel">Vous devez fournir un nom d\'affichage et un nom pour la chaîne!</string> <string name="error_display_name_channel">Vous devez fournir un nom d\'affichage et un nom pour la chaîne!</string>
<string name="action_channel_create">Créer une chaîne</string> <string name="action_channel_create">Créer une chaîne</string>
@ -185,7 +288,7 @@
<string name="report_comment_size">Veuillez préciser les raisons.</string> <string name="report_comment_size">Veuillez préciser les raisons.</string>
<string name="not_logged_in">Vous devez être connecté.e pour effectuer cette action !</string> <string name="not_logged_in">Vous devez être connecté.e pour effectuer cette action !</string>
<string name="successful_report">Le compte a été signalé !</string> <string name="successful_report">Le compte a été signalé !</string>
<string name="successful_report_comment">The comment has been reported!</string> <string name="successful_report_comment">Le commentaire a été signalé !</string>
<string name="successful_video_report">La vidéo a été signalée !</string> <string name="successful_video_report">La vidéo a été signalée !</string>
<string name="password_length_error">Le mot de passe doit contenir 6 caractères !</string> <string name="password_length_error">Le mot de passe doit contenir 6 caractères !</string>
<string name="muted_done">Le compte a été mis en sourdine !</string> <string name="muted_done">Le compte a été mis en sourdine !</string>
@ -208,6 +311,7 @@
<string name="pickup_categories">Sélection des catégories</string> <string name="pickup_categories">Sélection des catégories</string>
<string name="pickup_languages">Sélection des langues</string> <string name="pickup_languages">Sélection des langues</string>
<string name="notification_channel_name">Mise à jour des informations</string> <string name="notification_channel_name">Mise à jour des informations</string>
<string name="fetch_notification_channel_name">Fetch notifications</string>
<string name="add_account">Ajouter un compte</string> <string name="add_account">Ajouter un compte</string>
<string name="list_of_accounts">Liste des comptes</string> <string name="list_of_accounts">Liste des comptes</string>
<string name="pause">Pause</string> <string name="pause">Pause</string>

View File

@ -1,198 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="title_home">Home</string>
<string name="title_discover">Discover</string>
<string name="title_notifications">Notifications</string>
<string name="title_recently_added">Recently added</string>
<string name="title_trending">Trending</string>
<string name="title_most_liked">Most liked</string>
<string name="toast_error">Oops! An error occurred!</string>
<string name="title_muted">Muted</string>
<string name="title_channel">Channels</string>
<string name="do_not_list">Do not list</string>
<string name="blur">Blur</string>
<string name="display">Display</string>
<string name="no_opinion">No opinion</string>
<string name="instance_choice">Pickup an instance</string>
<string name="not_valide_instance">This instance does not seem to be valid!</string>
<string name="no_videos">No videos!</string>
<string name="favicon">Favicon</string>
<string name="open_with">Open with</string>
<string name="action_playlist_edit">Edit a playlist</string>
<string name="close">Close</string>
<string name="upload_video">Upload</string>
<string name="image_preview">Image preview</string>
<string name="file_to_upload">Select the file to upload</string>
<string name="channel">Channel</string>
<string name="videos">Videos</string>
<string name="channels">Channels</string>
<string name="yes">Yes</string>
<string name="no">No</string>
<string name="cancel">Cancel</string>
<string name="download">Download</string>
<string name="profile_picture">Profile picture</string>
<string name="update_video">Update video</string>
<string name="date_seconds">%d s</string>
<string name="date_minutes">%d m</string>
<string name="date_hours">%d h</string>
<string name="date_day">%d d</string>
<string name="number_view_video">%s views</string>
<string name="title_instance_login">Instance host</string>
<string name="uploading">Uploading, please wait…</string>
<string name="upload_video_success">The video has been uploaded!</string>
<string name="toast_cancelled">Upload cancelled!</string>
<string name="video_uploaded_action">Tap here to edit the video data.</string>
<string name="toot_select_image_error">An error occurred while selecting the media!</string>
<string name="download_file">Download %1$s</string>
<string name="action_privacy">Privacy</string>
<string name="action_logout">Logout</string>
<string name="login">Login</string>
<string name="password">Password</string>
<string name="email">Email</string>
<string name="tags">Tags</string>
<string name="validate">Validate</string>
<string name="share_with">Share with</string>
<string name="shared_via">Shared via TubeLab</string>
<string name="username">User name</string>
<string name="settings">Settings</string>
<string name="logout_account_confirmation">Are you sure you want to logout @%1$s@%2$s?</string>
<string name="following">Following</string>
<string name="followers">Followers</string>
<string name="client_error">Unable to get client id!</string>
<string name="toast_error_loading_account">An error occurred while switching between accounts!</string>
<string name="toast_error_search">An error occurred while searching!</string>
<string name="nothing_to_do">No action can be taken</string>
<string name="action_follow">Follow</string>
<string name="action_mute">Mute</string>
<string name="search">Search</string>
<string name="delete">Delete</string>
<string name="action_lists_confirm_delete">Are you sure you want to permanently delete this list?</string>
<string name="action_lists_delete">Delete list</string>
<string name="no_comments">Be the first to leave a comment on this video with the top right button!</string>
<string name="comment_no_allowed_peertube">Comments are not enabled on this video!</string>
<string name="pickup_resolution">Pick up a resolution</string>
<string name="bookmark_add_peertube">The video has been added to bookmarks!</string>
<string name="bookmark_remove_peertube">The video has been removed from bookmarks!</string>
<string name="information" tools:ignore="UnusedResources">Information</string>
<string name="app_logo">Logo of the application</string>
<!-- languages not translated -->
<string name="subscriptions">Subscriptions</string>
<string name="delete_comment">Delete a comment</string>
<string name="delete_comment_confirm">Are you sure to delete this comment?</string>
<string name="set_video_mode">Mode for videos</string>
<string name="my_videos">My videos</string>
<string name="title">Title</string>
<string name="license">License</string>
<string name="category">Category</string>
<string name="language">Language</string>
<string name="peertube_nsfw">This video contains mature or explicit content</string>
<string name="peertube_enable_comments">Enable video comments</string>
<string name="description">Description</string>
<string name="toast_peertube_video_updated">The video has been updated!</string>
<string name="register_account">Register an account</string>
<string name="email_address">Email address</string>
<string name="preview">Preview</string>
<string name="change_preview">Change preview</string>
<string name="name">Name</string>
<string name="display_more">Display more</string>
<string name="no_channels">No channels!</string>
<string name="report_helper">Some explanations about your report…</string>
<string name="report_video">Report video</string>
<string name="report">Report</string>
<string name="change_instance">Pickup another instance</string>
<string name="my_history">History</string>
<string name="edit">Edit</string>
<string name="set_video_mode_description">Allows to change mode for playing videos (default, streaming or via a browser).</string>
<string name="delete_video">Delete video</string>
<string name="delete_video_confirmation">Are you sure to delete this video?</string>
<string name="no_video_to_display">No videos to display!</string>
<string name="share">Share</string>
<string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> commented your video <b>%2$s</b>]]></string>
<string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> is following your channel <b>%2$s</b>]]></string>
<string name="peertube_follow_account"><![CDATA[<b>%1$s</b> is following your account]]></string>
<string name="peertube_video_published"><![CDATA[Your video <b>%1$s</b> has been published]]></string>
<string name="peertube_video_import_success"><![CDATA[Your video import <b>%1$s</b> succeeded]]></string>
<string name="peertube_video_import_error"><![CDATA[Your video import <b>%1$s</b> failed]]></string>
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> published a new video: <b>%2$s</b>]]></string>
<string name="peertube_video_blacklist"><![CDATA[Your video <b>%1$s</b> has been blacklisted]]></string>
<string name="peertube_video_unblacklist"><![CDATA[Your video <b>%1$s</b> has been unblacklisted]]></string>
<string name="add_public_comment">Add a public comment</string>
<string name="send_comment">Send comment</string>
<string name="all">All</string>
<!-- end languages -->
<string name="playlists">Playlists</string>
<string name="display_name">Display name</string>
<string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string>
<string name="error_display_name">You must provide a display name!</string>
<string name="error_channel_mandatory">The channel is required when the playlist is public.</string>
<string name="action_playlist_create">Create a playlist</string>
<string name="action_playlist_empty_content">There is nothing in this playlist yet.</string>
<string name="password_confirm">Confirm password</string>
<string name="agreement_check">I agree to %1$s and %2$s</string>
<string name="server_rules">server rules</string>
<string name="tos">terms of service</string>
<string name="sign_up">Sign up</string>
<string name="all_field_filled">Please, fill all the fields!</string>
<string name="password_error">Passwords don\'t match!</string>
<string name="email_error">The email doesn\'t seem to be valid!</string>
<string name="email_indicator">You will be sent a confirmation e-mail</string>
<string name="password_indicator">Use at least 8 characters</string>
<string name="password_too_short">Password should contain at least 8 characters</string>
<string name="username_error">Username should only contain letters, numbers and underscores</string>
<string name="account_created">Account created!</string>
<string name="account_created_message"> Your account has been created!\n\n
Think to validate your email within the 48 next hours.\n\n
You can now connect your account by writing <b>%1$s</b> in the first field and tap on <b>Connect</b>.\n\n
<b>Important</b>: If your instance required validation, you will receive an email once it is validated!
</string>
<string name="account">Account</string>
<string name="report_account">Report account</string>
<string-array name="settings_video_mode">
<item>Webview</item>
<item>Direct stream</item>
</string-array>
<string name="unfollow_confirm">Do you want to unfollow this account?</string>
<string name="title_video_peertube">Title for the video</string>
<string name="join_peertube">Join Peertube</string>
<string name="agreement_check_peertube">I am at least 16 years old and agree to the %1$s of this instance</string>
<string name="edit_profile">Edit profile</string>
<string name="make_an_action">Make an action</string>
<string name="action_unfollow">Unfollow</string>
<string name="display_nsfw_videos">Display sensitive videos</string>
<string name="fullscreen">Fullscreen</string>
<string name="bookmark_peertube_empty">There are no videos in your favourites!</string>
<string name="delete_channel">Remove channel</string>
<string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string>
<string name="no_muted">No muted accounts!</string>
<string name="error_display_name_channel">You must define a name and a display name for this channel!</string>
<string name="action_channel_create">Create a channel</string>
<string name="action_channel_edit">Edit channel</string>
<string name="email_error_domain">Email addresses in %1$s are not allowed!</string>
<string name="report_comment_size">Please, specify the reasons</string>
<string name="not_logged_in">You must be authenticated to proceed to this action!</string>
<string name="successful_report">The account has been reported!</string>
<string name="successful_video_report">The video has been reported!</string>
<string name="password_length_error">The password must contain at least 6 characters!</string>
<string name="muted_done">The account has been muted!</string>
<string name="edit_video">Edit video</string>
<string name="create_an_account">Create an account</string>
<string name="followers_count">%1$s Subscribers</string>
<string name="developer">Developer</string>
<string name="about_vesrion">Release %1$s</string>
<string name="about_the_app">About the app</string>
<string name="Donate">Donate</string>
<string name="source_code">Source code</string>
<string name="issue_tracker">Issue tracker</string>
<string name="action_instance_empty_content">No instances match these criteria</string>
<string name="instances_picker">Instances picker</string>
<string name="pickup_instance">Pickup this instance</string>
<string name="sensitive_video"> Sensitive videos</string>
<string name="sensitive_content">Sensitive content: %1$s</string>
<string name="followers_instance">%1$s followers instances</string>
<string name="help">Help</string>
<string name="pickup_categories">Pickup categories</string>
<string name="pickup_languages">Pickup languages</string>
<string name="notification_channel_name">Update information</string>
<string name="add_account">Add an account</string>
<string name="list_of_accounts">List of accounts</string>
</resources>

View File

@ -1,198 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="title_home">Home</string>
<string name="title_discover">Discover</string>
<string name="title_notifications">Notifications</string>
<string name="title_recently_added">Recently added</string>
<string name="title_trending">Trending</string>
<string name="title_most_liked">Most liked</string>
<string name="toast_error">Oops! An error occurred!</string>
<string name="title_muted">Muted</string>
<string name="title_channel">Channels</string>
<string name="do_not_list">Do not list</string>
<string name="blur">Blur</string>
<string name="display">Display</string>
<string name="no_opinion">No opinion</string>
<string name="instance_choice">Pickup an instance</string>
<string name="not_valide_instance">This instance does not seem to be valid!</string>
<string name="no_videos">No videos!</string>
<string name="favicon">Favicon</string>
<string name="open_with">Open with</string>
<string name="action_playlist_edit">Edit a playlist</string>
<string name="close">Close</string>
<string name="upload_video">Upload</string>
<string name="image_preview">Image preview</string>
<string name="file_to_upload">Select the file to upload</string>
<string name="channel">Channel</string>
<string name="videos">Videos</string>
<string name="channels">Channels</string>
<string name="yes">Yes</string>
<string name="no">No</string>
<string name="cancel">Cancel</string>
<string name="download">Download</string>
<string name="profile_picture">Profile picture</string>
<string name="update_video">Update video</string>
<string name="date_seconds">%d s</string>
<string name="date_minutes">%d m</string>
<string name="date_hours">%d h</string>
<string name="date_day">%d d</string>
<string name="number_view_video">%s views</string>
<string name="title_instance_login">Instance host</string>
<string name="uploading">Uploading, please wait…</string>
<string name="upload_video_success">The video has been uploaded!</string>
<string name="toast_cancelled">Upload cancelled!</string>
<string name="video_uploaded_action">Tap here to edit the video data.</string>
<string name="toot_select_image_error">An error occurred while selecting the media!</string>
<string name="download_file">Download %1$s</string>
<string name="action_privacy">Privacy</string>
<string name="action_logout">Logout</string>
<string name="login">Login</string>
<string name="password">Password</string>
<string name="email">Email</string>
<string name="tags">Tags</string>
<string name="validate">Validate</string>
<string name="share_with">Share with</string>
<string name="shared_via">Shared via TubeLab</string>
<string name="username">User name</string>
<string name="settings">Settings</string>
<string name="logout_account_confirmation">Are you sure you want to logout @%1$s@%2$s?</string>
<string name="following">Following</string>
<string name="followers">Followers</string>
<string name="client_error">Unable to get client id!</string>
<string name="toast_error_loading_account">An error occurred while switching between accounts!</string>
<string name="toast_error_search">An error occurred while searching!</string>
<string name="nothing_to_do">No action can be taken</string>
<string name="action_follow">Follow</string>
<string name="action_mute">Mute</string>
<string name="search">Search</string>
<string name="delete">Delete</string>
<string name="action_lists_confirm_delete">Are you sure you want to permanently delete this list?</string>
<string name="action_lists_delete">Delete list</string>
<string name="no_comments">Be the first to leave a comment on this video with the top right button!</string>
<string name="comment_no_allowed_peertube">Comments are not enabled on this video!</string>
<string name="pickup_resolution">Pick up a resolution</string>
<string name="bookmark_add_peertube">The video has been added to bookmarks!</string>
<string name="bookmark_remove_peertube">The video has been removed from bookmarks!</string>
<string name="information" tools:ignore="UnusedResources">Information</string>
<string name="app_logo">Logo of the application</string>
<!-- languages not translated -->
<string name="subscriptions">Subscriptions</string>
<string name="delete_comment">Delete a comment</string>
<string name="delete_comment_confirm">Are you sure to delete this comment?</string>
<string name="set_video_mode">Mode for videos</string>
<string name="my_videos">My videos</string>
<string name="title">Title</string>
<string name="license">License</string>
<string name="category">Category</string>
<string name="language">Language</string>
<string name="peertube_nsfw">This video contains mature or explicit content</string>
<string name="peertube_enable_comments">Enable video comments</string>
<string name="description">Description</string>
<string name="toast_peertube_video_updated">The video has been updated!</string>
<string name="register_account">Register an account</string>
<string name="email_address">Email address</string>
<string name="preview">Preview</string>
<string name="change_preview">Change preview</string>
<string name="name">Name</string>
<string name="display_more">Display more</string>
<string name="no_channels">No channels!</string>
<string name="report_helper">Some explanations about your report…</string>
<string name="report_video">Report video</string>
<string name="report">Report</string>
<string name="change_instance">Pickup another instance</string>
<string name="my_history">History</string>
<string name="edit">Edit</string>
<string name="set_video_mode_description">Allows to change mode for playing videos (default, streaming or via a browser).</string>
<string name="delete_video">Delete video</string>
<string name="delete_video_confirmation">Are you sure to delete this video?</string>
<string name="no_video_to_display">No videos to display!</string>
<string name="share">Share</string>
<string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> commented your video <b>%2$s</b>]]></string>
<string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> is following your channel <b>%2$s</b>]]></string>
<string name="peertube_follow_account"><![CDATA[<b>%1$s</b> is following your account]]></string>
<string name="peertube_video_published"><![CDATA[Your video <b>%1$s</b> has been published]]></string>
<string name="peertube_video_import_success"><![CDATA[Your video import <b>%1$s</b> succeeded]]></string>
<string name="peertube_video_import_error"><![CDATA[Your video import <b>%1$s</b> failed]]></string>
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> published a new video: <b>%2$s</b>]]></string>
<string name="peertube_video_blacklist"><![CDATA[Your video <b>%1$s</b> has been blacklisted]]></string>
<string name="peertube_video_unblacklist"><![CDATA[Your video <b>%1$s</b> has been unblacklisted]]></string>
<string name="add_public_comment">Add a public comment</string>
<string name="send_comment">Send comment</string>
<string name="all">All</string>
<!-- end languages -->
<string name="playlists">Playlists</string>
<string name="display_name">Display name</string>
<string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string>
<string name="error_display_name">You must provide a display name!</string>
<string name="error_channel_mandatory">The channel is required when the playlist is public.</string>
<string name="action_playlist_create">Create a playlist</string>
<string name="action_playlist_empty_content">There is nothing in this playlist yet.</string>
<string name="password_confirm">Confirm password</string>
<string name="agreement_check">I agree to %1$s and %2$s</string>
<string name="server_rules">server rules</string>
<string name="tos">terms of service</string>
<string name="sign_up">Sign up</string>
<string name="all_field_filled">Please, fill all the fields!</string>
<string name="password_error">Passwords don\'t match!</string>
<string name="email_error">The email doesn\'t seem to be valid!</string>
<string name="email_indicator">You will be sent a confirmation e-mail</string>
<string name="password_indicator">Use at least 8 characters</string>
<string name="password_too_short">Password should contain at least 8 characters</string>
<string name="username_error">Username should only contain letters, numbers and underscores</string>
<string name="account_created">Account created!</string>
<string name="account_created_message"> Your account has been created!\n\n
Think to validate your email within the 48 next hours.\n\n
You can now connect your account by writing <b>%1$s</b> in the first field and tap on <b>Connect</b>.\n\n
<b>Important</b>: If your instance required validation, you will receive an email once it is validated!
</string>
<string name="account">Account</string>
<string name="report_account">Report account</string>
<string-array name="settings_video_mode">
<item>Webview</item>
<item>Direct stream</item>
</string-array>
<string name="unfollow_confirm">Do you want to unfollow this account?</string>
<string name="title_video_peertube">Title for the video</string>
<string name="join_peertube">Join Peertube</string>
<string name="agreement_check_peertube">I am at least 16 years old and agree to the %1$s of this instance</string>
<string name="edit_profile">Edit profile</string>
<string name="make_an_action">Make an action</string>
<string name="action_unfollow">Unfollow</string>
<string name="display_nsfw_videos">Display sensitive videos</string>
<string name="fullscreen">Fullscreen</string>
<string name="bookmark_peertube_empty">There are no videos in your favourites!</string>
<string name="delete_channel">Remove channel</string>
<string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string>
<string name="no_muted">No muted accounts!</string>
<string name="error_display_name_channel">You must define a name and a display name for this channel!</string>
<string name="action_channel_create">Create a channel</string>
<string name="action_channel_edit">Edit channel</string>
<string name="email_error_domain">Email addresses in %1$s are not allowed!</string>
<string name="report_comment_size">Please, specify the reasons</string>
<string name="not_logged_in">You must be authenticated to proceed to this action!</string>
<string name="successful_report">The account has been reported!</string>
<string name="successful_video_report">The video has been reported!</string>
<string name="password_length_error">The password must contain at least 6 characters!</string>
<string name="muted_done">The account has been muted!</string>
<string name="edit_video">Edit video</string>
<string name="create_an_account">Create an account</string>
<string name="followers_count">%1$s Subscribers</string>
<string name="developer">Developer</string>
<string name="about_vesrion">Release %1$s</string>
<string name="about_the_app">About the app</string>
<string name="Donate">Donate</string>
<string name="source_code">Source code</string>
<string name="issue_tracker">Issue tracker</string>
<string name="action_instance_empty_content">No instances match these criteria</string>
<string name="instances_picker">Instances picker</string>
<string name="pickup_instance">Pickup this instance</string>
<string name="sensitive_video"> Sensitive videos</string>
<string name="sensitive_content">Sensitive content: %1$s</string>
<string name="followers_instance">%1$s followers instances</string>
<string name="help">Help</string>
<string name="pickup_categories">Pickup categories</string>
<string name="pickup_languages">Pickup languages</string>
<string name="notification_channel_name">Update information</string>
<string name="add_account">Add an account</string>
<string name="list_of_accounts">List of accounts</string>
</resources>

View File

@ -1,7 +1,43 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"> <resources xmlns:tools="http://schemas.android.com/tools">
<string name="set_video_in_list">Videos in list</string>
<string name="set_video_in_list_description">Change the layout for displaying videos in a list</string>
<string name="no_instances">No instances !</string>
<string name="show_more">Show more</string>
<string name="show_less">Show less</string>
<string name="set_play_screen_lock">Screen lock</string>
<string name="set_play_screen_lock_description">Keep playing videos when the screen is locked</string>
<string name="save">Save</string>
<string name="enable_history">Enable history</string>
<string name="change_profile_picture">Change profile picture</string>
<string name="set_autoplay">Automatic playback</string>
<string name="set_autoplay_description">If enabled, videos will be played automatically</string>
<string name="set_fullscreen">Fullscreen</string>
<string name="set_fullscreen_description">Automatically open videos in fullscreen</string>
<string name="set_autoplay_next_video">Automatically start playing the next video</string>
<string name="set_autoplay_next_video_description">When a video ends, follow up with the next suggested video.</string>
<string name="add_public_reply">Aggiungere una risposta pubblica</string>
<string name="activity">Activity</string>
<string name="app">App</string>
<string name="notif_new_video">New video from your subscriptions</string>
<string name="notif_new_comment">New comment on your video</string>
<string name="notif_blocked">One of your video is blocked/unblocked</string>
<string name="notif_video_published">Video published (after transcoding/scheduled update)</string>
<string name="notif_video_imported">Video import finished</string>
<string name="notif_new_followers">You or your channel(s) has a new follower</string>
<string name="notif_video_mention">Someone mentioned you in video comments</string>
<string name="notif_abuse_received">An abuse report received a new message</string>
<string name="notif_abuse_accepted">One of your abuse reports has been accepted or rejected by moderators</string>
<plurals name="number_of_replies">
<item quantity="one">%d risposta</item>
<item quantity="other">%d risposte</item>
</plurals>
<string name="reply">Rispondi</string>
<string name="set_theme">Tema</string>
<string name="set_theme_description">Permettere di cambiare il tema dell\'applicazione</string>
<string name="federation_issue">Il video non può essere federato!</string>
<string name="title_home">Inizio</string> <string name="title_home">Inizio</string>
<string name="title_local">Local</string> <string name="title_local">Locale</string>
<string name="title_discover">Esplora</string> <string name="title_discover">Esplora</string>
<string name="title_notifications">Notifiche</string> <string name="title_notifications">Notifiche</string>
<string name="title_recently_added">Aggiunti di recente</string> <string name="title_recently_added">Aggiunti di recente</string>
@ -17,7 +53,7 @@
<string name="instance_choice">Trova un\'istanza</string> <string name="instance_choice">Trova un\'istanza</string>
<string name="not_valide_instance">Questa istanza non sembra essere valida!</string> <string name="not_valide_instance">Questa istanza non sembra essere valida!</string>
<string name="no_videos">Nessun video!</string> <string name="no_videos">Nessun video!</string>
<string name="no_notifications">No notifications!</string> <string name="no_notifications">Nessuna notifica!</string>
<string name="favicon">Favicon</string> <string name="favicon">Favicon</string>
<string name="open_with">Apri con</string> <string name="open_with">Apri con</string>
<string name="action_playlist_edit">Modifica playlist</string> <string name="action_playlist_edit">Modifica playlist</string>
@ -25,15 +61,32 @@
<string name="upload_video">Carica</string> <string name="upload_video">Carica</string>
<string name="image_preview">Anteprima immagine</string> <string name="image_preview">Anteprima immagine</string>
<string name="file_to_upload">Seleziona il file da caricare</string> <string name="file_to_upload">Seleziona il file da caricare</string>
<string name="new_video">New video</string>
<string name="new_blacklist">New blacklist info</string>
<string name="new_my_video_published">Your video is published</string>
<string name="new_my_video_error">Error when publishing your video</string>
<string name="new_comment">New comment</string>
<string name="new_follow">New follow</string>
<string name="channel">Canale</string> <string name="channel">Canale</string>
<string name="videos">Video</string> <string name="videos">Video</string>
<string name="channels">Canali</string> <string name="channels">Canali</string>
<string name="refresh_every">Fetch every:</string>
<string-array name="refresh_time">
<item>Never</item>
<item>15 minutes</item>
<item>30 minutes</item>
<item>1 hour</item>
<item>2 hours</item>
<item>6 hours</item>
<item>12 hours</item>
</string-array>
<string name="yes">Si</string> <string name="yes">Si</string>
<string name="no">No</string> <string name="no">No</string>
<string name="cancel">Annulla</string> <string name="cancel">Annulla</string>
<string name="download">Scarica</string> <string name="download">Scarica</string>
<string name="profile_picture">Immagine di profilo</string> <string name="profile_picture">Immagine di profilo</string>
<string name="update_video">Aggiorna video</string> <string name="update_video">Aggiorna video</string>
<string name="remove_from_playlist">Rimuovere dalla playlist</string>
<string name="date_seconds">%d s</string> <string name="date_seconds">%d s</string>
<string name="date_minutes">%d m</string> <string name="date_minutes">%d m</string>
<string name="date_hours">%d h</string> <string name="date_hours">%d h</string>
@ -46,6 +99,7 @@
<string name="video_uploaded_action">Premi qui per modificare i dati del video.</string> <string name="video_uploaded_action">Premi qui per modificare i dati del video.</string>
<string name="toot_select_image_error">Si è verificato un errore durante la selezione del archivio!</string> <string name="toot_select_image_error">Si è verificato un errore durante la selezione del archivio!</string>
<string name="download_file">Scarica %1$s</string> <string name="download_file">Scarica %1$s</string>
<string name="account_updated">The account has been updated!</string>
<string name="action_privacy">Privacy</string> <string name="action_privacy">Privacy</string>
<string name="action_logout">Disconnettiti</string> <string name="action_logout">Disconnettiti</string>
<string name="login">Accedi</string> <string name="login">Accedi</string>
@ -79,9 +133,38 @@
<string name="app_logo">Logo dell\'applicazione</string> <string name="app_logo">Logo dell\'applicazione</string>
<!-- languages not translated --> <!-- languages not translated -->
<string name="subscriptions">Abbonamenti</string> <string name="subscriptions">Abbonamenti</string>
<string name="delete_instance">Delete an instance</string>
<string name="delete_instance_confirm">Are you sure to delete this instance?</string>
<string name="delete_comment">Elimina il commento</string> <string name="delete_comment">Elimina il commento</string>
<string name="delete_comment_confirm">Sei sicuro di voler eliminare questo commento?</string> <string name="delete_comment_confirm">Sei sicuro di voler eliminare questo commento?</string>
<string name="set_video_mode">Modalità per i video</string> <string name="set_video_mode">Modalità per i video</string>
<string name="filter">Filtro</string>
<string name="sepia_search">Ricerca Seppia</string>
<string name="sepia_element_nsfw">Visualizzare il contenuto sensibile</string>
<string name="sepia_element_published_date">Data di pubblicazione</string>
<string name="any">Qualsiasi</string>
<string name="today">Oggi</string>
<string name="last_7_days">Ultimi 7 giorni</string>
<string name="last_30_days">Ultimi 30 giorni</string>
<string name="last_365_days">Ultimi 365 giorni</string>
<string name="sepia_element_duration">Durata</string>
<string name="duration_short"><![CDATA[Breve (<4 min)]]></string>
<string name="duration_medium"><![CDATA[Medio (4-10 min)]]></string>
<string name="duration_long"><![CDATA[Lungo (> 10 min)]]></string>
<string name="display_all_categories">Visualizza tutte le categorie</string>
<string name="display_all_licenses">Visualizzare tutte le licenze</string>
<string name="display_all_languages">Visualizza tutte le lingue</string>
<string name="all_of_these_tags">Tutti questi tag</string>
<string name="one_of_these_tags">Uno di questi tag</string>
<string name="apply_filter">Applicare il filtro</string>
<string-array name="sort_by_array">
<item>Migliore partita</item>
<item>I più recenti</item>
<item>Meno recente</item>
</string-array>
<string name="sort_by">Ordina per</string>
<string name="sepia_search_hint">Parola chiave, canale, video, ecc.</string>
<string name="sepia_indication">Sepia Search visualizza video e canali che corrispondono alla tua ricerca, ma non è l\'editore, né il proprietario. Se si notano problemi con un video, segnalarlo agli amministratori sul sito web di PeerTube dove viene pubblicato il video.</string>
<string name="my_videos">I miei video</string> <string name="my_videos">I miei video</string>
<string name="title">Titolo</string> <string name="title">Titolo</string>
<string name="license">Licenza</string> <string name="license">Licenza</string>
@ -104,17 +187,19 @@
<string name="change_instance">Prendi un\'altra istanza</string> <string name="change_instance">Prendi un\'altra istanza</string>
<string name="my_history">Cronologia</string> <string name="my_history">Cronologia</string>
<string name="edit">Modifica</string> <string name="edit">Modifica</string>
<string name="video_settings">Video settings</string> <string name="video_settings">Impostazioni video</string>
<string name="app_interface">Interface</string> <string name="app_interface">Interfaccia</string>
<string name="set_cache_mode">Cache</string> <string name="set_cache_mode">Cache</string>
<string name="set_video_cache_description">Définir le cache pour les vidéos (défaut 100Mo)</string> <string name="set_video_cache_description">Impostare la cache per i video (default 100Mb)</string>
<string name="set_video_quality_description">Define a default quality for videos</string> <string name="set_video_quality_description">Definire una qualità predefinita per i video</string>
<string name="set_quality_mode">Resolution for videos</string> <string name="set_quality_mode">Risoluzione per i video</string>
<string name="video_cache_value">Video cache: %d Mb</string> <string name="video_cache_value">Memoria video: %d Mb</string>
<string name="captions">Didascalie</string> <string name="captions">Didascalie</string>
<string name="pickup_captions">Scegliere le didascalie</string> <string name="pickup_captions">Scegliere le didascalie</string>
<string name="none">Nessuno</string> <string name="none">Nessuno</string>
<string name="set_video_mode_description">Permette di cambiare la modalità di riproduzione dei video (di default, in streaming o tramite browser).</string> <string name="set_video_mode_description">Permette di cambiare la modalità di riproduzione dei video (di default, in streaming o tramite browser).</string>
<string name="delete_account_comment">Cancellare i commenti del conto</string>
<string name="delete_account_comment_confirm">Sei sicuro di voler rimuovere tutti i commenti di questo account?</string>
<string name="delete_video">Elimina video</string> <string name="delete_video">Elimina video</string>
<string name="delete_video_confirmation">Sei sicuro di voler eliminare questo video?</string> <string name="delete_video_confirmation">Sei sicuro di voler eliminare questo video?</string>
<string name="no_video_to_display">Nessun video da mostrare!</string> <string name="no_video_to_display">Nessun video da mostrare!</string>
@ -128,12 +213,22 @@
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> ha pubblicato un nuovo video: <b>%2$s</b>]]></string> <string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> ha pubblicato un nuovo video: <b>%2$s</b>]]></string>
<string name="peertube_video_blacklist"><![CDATA[Il tuo video <b>%1$s</b> è stato messo nella lista nera]]></string> <string name="peertube_video_blacklist"><![CDATA[Il tuo video <b>%1$s</b> è stato messo nella lista nera]]></string>
<string name="peertube_video_unblacklist"><![CDATA[Il tuo video <b>%1$s</b> è stato rimosso dalla lista nera]]></string> <string name="peertube_video_unblacklist"><![CDATA[Il tuo video <b>%1$s</b> è stato rimosso dalla lista nera]]></string>
<string name="peertube_video_abuse"><![CDATA[New abuse report for video: <b>%1$s</b>]]></string> <string name="peertube_video_report_success"><![CDATA[Your abuse report <b>%1$s</b> has been accepted]]></string>
<string name="peertube_video_abuse"><![CDATA[Nuovo rapporto di abuso per il video: <b>%1$s</b>]]></string>
<string name="add_public_comment">Aggiungi un commento pubblico</string> <string name="add_public_comment">Aggiungi un commento pubblico</string>
<string name="send_comment">Invia commento</string> <string name="send_comment">Invia commento</string>
<string name="all">Tutto</string> <string name="all">Tutto</string>
<!-- end languages --> <!-- end languages -->
<string name="delete_history">Delete videos history</string>
<string name="delete_history_confirm">Are you sure you want to delete all your videos history?</string>
<string name="export_list">Export</string>
<string name="import_list">Import</string>
<string name="export_notification_title">Successful export!</string>
<string name="export_notification_content">Tap here to send the export by email</string>
<string name="export_notification_subjet">New Playlist</string>
<string name="export_notification_body">Open the attached file with TubeLab</string>
<string name="playlists">Playlist</string> <string name="playlists">Playlist</string>
<string name="no_playlist">No playlists</string>
<string name="display_name">Nome visualizzato</string> <string name="display_name">Nome visualizzato</string>
<string name="action_playlist_add">Non hai nessuna playlist. Premi l\'icona \"+\" per aggiungere una nuova playlist</string> <string name="action_playlist_add">Non hai nessuna playlist. Premi l\'icona \"+\" per aggiungere una nuova playlist</string>
<string name="error_display_name">È necessario fornire un nome da visualizzare!</string> <string name="error_display_name">È necessario fornire un nome da visualizzare!</string>
@ -163,11 +258,18 @@
<string-array name="settings_video_mode"> <string-array name="settings_video_mode">
<item>Webview</item> <item>Webview</item>
<item>Stream diretto</item> <item>Stream diretto</item>
<item>Magnet</item>
<item>Torrent</item>
</string-array>
<string-array name="settings_theme">
<item>Luce</item>
<item>Scuro</item>
<item>Automatica</item>
</string-array> </string-array>
<string-array name="settings_video_quality"> <string-array name="settings_video_quality">
<item>High</item> <item>Alto</item>
<item>Medium</item> <item>Medio</item>
<item>Low</item> <item>Basso</item>
</string-array> </string-array>
<string name="unfollow_confirm">Vuoi smettere di seguire questo account?</string> <string name="unfollow_confirm">Vuoi smettere di seguire questo account?</string>
<string name="title_video_peertube">Titolo per il video</string> <string name="title_video_peertube">Titolo per il video</string>
@ -181,6 +283,7 @@
<string name="bookmark_peertube_empty">Non c\'è nessun video nei tuoi favoriti!</string> <string name="bookmark_peertube_empty">Non c\'è nessun video nei tuoi favoriti!</string>
<string name="delete_channel">Rimuovi Canale</string> <string name="delete_channel">Rimuovi Canale</string>
<string name="action_channel_confirm_delete">Sei sicuro di voler eliminare definitivamente questo canale?</string> <string name="action_channel_confirm_delete">Sei sicuro di voler eliminare definitivamente questo canale?</string>
<string name="modify_playlists">Video in playlist</string>
<string name="no_muted">Nessun account silenziato!</string> <string name="no_muted">Nessun account silenziato!</string>
<string name="error_display_name_channel">Devi definire un nome e un nome visualizzato per questo canale!</string> <string name="error_display_name_channel">Devi definire un nome e un nome visualizzato per questo canale!</string>
<string name="action_channel_create">Creare un canale</string> <string name="action_channel_create">Creare un canale</string>
@ -189,7 +292,7 @@
<string name="report_comment_size">Per favore, specifica una motivazione</string> <string name="report_comment_size">Per favore, specifica una motivazione</string>
<string name="not_logged_in">Per eseguire questa operazione, è necessario autenticarsi!</string> <string name="not_logged_in">Per eseguire questa operazione, è necessario autenticarsi!</string>
<string name="successful_report">L\'account è stato segnalato!</string> <string name="successful_report">L\'account è stato segnalato!</string>
<string name="successful_report_comment">The comment has been reported!</string> <string name="successful_report_comment">Il commento è stato riportato!</string>
<string name="successful_video_report">Il video è stato segnalato!</string> <string name="successful_video_report">Il video è stato segnalato!</string>
<string name="password_length_error">La password deve contenere almeno 6 caratteri!</string> <string name="password_length_error">La password deve contenere almeno 6 caratteri!</string>
<string name="muted_done">L\'account è stato silenziato!</string> <string name="muted_done">L\'account è stato silenziato!</string>
@ -212,6 +315,7 @@
<string name="pickup_categories">Selezionare categorie</string> <string name="pickup_categories">Selezionare categorie</string>
<string name="pickup_languages">Scegliere le lingue</string> <string name="pickup_languages">Scegliere le lingue</string>
<string name="notification_channel_name">Aggiorna informazioni</string> <string name="notification_channel_name">Aggiorna informazioni</string>
<string name="fetch_notification_channel_name">Fetch notifications</string>
<string name="add_account">Aggiungi un account</string> <string name="add_account">Aggiungi un account</string>
<string name="list_of_accounts">Lista di account</string> <string name="list_of_accounts">Lista di account</string>
<string name="pause">Pausa</string> <string name="pause">Pausa</string>

View File

@ -1,7 +1,42 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"> <resources xmlns:tools="http://schemas.android.com/tools">
<string name="set_video_in_list">Videos in list</string>
<string name="set_video_in_list_description">Change the layout for displaying videos in a list</string>
<string name="no_instances">No instances !</string>
<string name="show_more">Show more</string>
<string name="show_less">Show less</string>
<string name="set_play_screen_lock">Screen lock</string>
<string name="set_play_screen_lock_description">Keep playing videos when the screen is locked</string>
<string name="save">Save</string>
<string name="enable_history">Enable history</string>
<string name="change_profile_picture">Change profile picture</string>
<string name="set_autoplay">Automatic playback</string>
<string name="set_autoplay_description">If enabled, videos will be played automatically</string>
<string name="set_fullscreen">Fullscreen</string>
<string name="set_fullscreen_description">Automatically open videos in fullscreen</string>
<string name="set_autoplay_next_video">Automatically start playing the next video</string>
<string name="set_autoplay_next_video_description">When a video ends, follow up with the next suggested video.</string>
<string name="add_public_reply">Add a public reply</string>
<string name="activity">Activity</string>
<string name="app">App</string>
<string name="notif_new_video">New video from your subscriptions</string>
<string name="notif_new_comment">New comment on your video</string>
<string name="notif_blocked">One of your video is blocked/unblocked</string>
<string name="notif_video_published">Video published (after transcoding/scheduled update)</string>
<string name="notif_video_imported">Video import finished</string>
<string name="notif_new_followers">You or your channel(s) has a new follower</string>
<string name="notif_video_mention">Someone mentioned you in video comments</string>
<string name="notif_abuse_received">An abuse report received a new message</string>
<string name="notif_abuse_accepted">One of your abuse reports has been accepted or rejected by moderators</string>
<plurals name="number_of_replies">
<item quantity="other">%d が返信</item>
</plurals>
<string name="reply">返信</string>
<string name="set_theme">テーマ</string>
<string name="set_theme_description">Allow to change app theme</string>
<string name="federation_issue">The video cannot be federated!</string>
<string name="title_home">ホーム</string> <string name="title_home">ホーム</string>
<string name="title_local">Local</string> <string name="title_local">ローカル</string>
<string name="title_discover">発見</string> <string name="title_discover">発見</string>
<string name="title_notifications">通知</string> <string name="title_notifications">通知</string>
<string name="title_recently_added">最近追加された項目</string> <string name="title_recently_added">最近追加された項目</string>
@ -25,15 +60,32 @@
<string name="upload_video">アップロード</string> <string name="upload_video">アップロード</string>
<string name="image_preview">画像のプレビュー</string> <string name="image_preview">画像のプレビュー</string>
<string name="file_to_upload">アップロードするファイルを選択する</string> <string name="file_to_upload">アップロードするファイルを選択する</string>
<string name="new_video">New video</string>
<string name="new_blacklist">New blacklist info</string>
<string name="new_my_video_published">Your video is published</string>
<string name="new_my_video_error">Error when publishing your video</string>
<string name="new_comment">New comment</string>
<string name="new_follow">New follow</string>
<string name="channel">チャンネル</string> <string name="channel">チャンネル</string>
<string name="videos">動画</string> <string name="videos">動画</string>
<string name="channels">チャンネル</string> <string name="channels">チャンネル</string>
<string name="refresh_every">Fetch every:</string>
<string-array name="refresh_time">
<item>Never</item>
<item>15 minutes</item>
<item>30 minutes</item>
<item>1 hour</item>
<item>2 hours</item>
<item>6 hours</item>
<item>12 hours</item>
</string-array>
<string name="yes">はい</string> <string name="yes">はい</string>
<string name="no">いいえ</string> <string name="no">いいえ</string>
<string name="cancel">キャンセル</string> <string name="cancel">キャンセル</string>
<string name="download">ダウンロード</string> <string name="download">ダウンロード</string>
<string name="profile_picture">プロフィール画像</string> <string name="profile_picture">プロフィール画像</string>
<string name="update_video">動画をアップロード</string> <string name="update_video">動画をアップロード</string>
<string name="remove_from_playlist">Remove from playlist</string>
<string name="date_seconds">%d 秒</string> <string name="date_seconds">%d 秒</string>
<string name="date_minutes">%d 分</string> <string name="date_minutes">%d 分</string>
<string name="date_hours">%d 時間</string> <string name="date_hours">%d 時間</string>
@ -46,68 +98,98 @@
<string name="video_uploaded_action">タップして動画情報を編集します。</string> <string name="video_uploaded_action">タップして動画情報を編集します。</string>
<string name="toot_select_image_error">メディアの選択中にエラーが発生しました!</string> <string name="toot_select_image_error">メディアの選択中にエラーが発生しました!</string>
<string name="download_file">ダウンロード: %1$s</string> <string name="download_file">ダウンロード: %1$s</string>
<string name="account_updated">The account has been updated!</string>
<string name="action_privacy">プライバシー</string> <string name="action_privacy">プライバシー</string>
<string name="action_logout">ログアウト</string> <string name="action_logout">ログアウト</string>
<string name="login">ログイン</string> <string name="login">ログイン</string>
<string name="password">パスワード</string> <string name="password">パスワード</string>
<string name="email">メールアドレス</string> <string name="email">メールアドレス</string>
<string name="tags">タグ</string> <string name="tags">タグ</string>
<string name="validate">Validate</string> <string name="validate">完了</string>
<string name="share_with">Share with</string> <string name="share_with">共有</string>
<string name="shared_via">Shared via TubeLab</string> <string name="shared_via">Shared via TubeLab</string>
<string name="username">User name</string> <string name="username">ユーザー名</string>
<string name="settings">Settings</string> <string name="settings">設定</string>
<string name="logout_account_confirmation">Are you sure you want to logout @%1$s@%2$s?</string> <string name="logout_account_confirmation">\@%1$s@%2$sからログアウトしますか</string>
<string name="following">Following</string> <string name="following">フォロー中</string>
<string name="followers">Followers</string> <string name="followers">フォロワー</string>
<string name="client_error">Unable to get client id!</string> <string name="client_error">クライアントIDを取得できませんでした。</string>
<string name="toast_error_loading_account">An error occurred while switching between accounts!</string> <string name="toast_error_loading_account">アカウントの切り替え中にエラーが発生しました!</string>
<string name="toast_error_search">An error occurred while searching!</string> <string name="toast_error_search">検索中にエラーが発生しました!</string>
<string name="nothing_to_do">No action can be taken</string> <string name="nothing_to_do">何もすることはできません</string>
<string name="action_follow">Follow</string> <string name="action_follow">フォローする</string>
<string name="action_mute">Mute</string> <string name="action_mute">ミュート</string>
<string name="search">Search</string> <string name="search">検索</string>
<string name="delete">Delete</string> <string name="delete">削除</string>
<string name="action_lists_confirm_delete">Are you sure you want to permanently delete this list?</string> <string name="action_lists_confirm_delete">このリストを完全に削除してもよろしいですか?</string>
<string name="action_lists_delete">Delete list</string> <string name="action_lists_delete">リストを削除</string>
<string name="no_comments">Be the first to leave a comment on this video with the top right button!</string> <string name="no_comments">右上のボタンをタップして最初のコメントを投稿しましょう!</string>
<string name="comment_no_allowed_peertube">Comments are not enabled on this video!</string> <string name="comment_no_allowed_peertube">この動画はコメントが無効です!</string>
<string name="pickup_resolution">Pick up a resolution</string> <string name="pickup_resolution">画質を選択</string>
<string name="bookmark_add_peertube">The video has been added to bookmarks!</string> <string name="bookmark_add_peertube">この動画をブックマークに追加しました!</string>
<string name="bookmark_remove_peertube">The video has been removed from bookmarks!</string> <string name="bookmark_remove_peertube">この動画をブックマークから削除しました!</string>
<string name="information" tools:ignore="UnusedResources">Information</string> <string name="information" tools:ignore="UnusedResources">情報</string>
<string name="app_logo">Logo of the application</string> <string name="app_logo">アプリケーションのロゴ</string>
<!-- languages not translated --> <!-- languages not translated -->
<string name="subscriptions">Subscriptions</string> <string name="subscriptions">サブスクリプション</string>
<string name="delete_comment">Delete a comment</string> <string name="delete_instance">Delete an instance</string>
<string name="delete_comment_confirm">Are you sure to delete this comment?</string> <string name="delete_instance_confirm">Are you sure to delete this instance?</string>
<string name="set_video_mode">Mode for videos</string> <string name="delete_comment">コメントを削除</string>
<string name="my_videos">My videos</string> <string name="delete_comment_confirm">このコメントを削除しますか?</string>
<string name="title">Title</string> <string name="set_video_mode">動画のモード</string>
<string name="license">License</string> <string name="filter">フィルター</string>
<string name="category">Category</string> <string name="sepia_search">Sepia search</string>
<string name="language">Language</string> <string name="sepia_element_nsfw">Display sensitive content</string>
<string name="peertube_nsfw">This video contains mature or explicit content</string> <string name="sepia_element_published_date">Published date</string>
<string name="peertube_enable_comments">Enable video comments</string> <string name="any">Any</string>
<string name="description">Description</string> <string name="today">Today</string>
<string name="toast_peertube_video_updated">The video has been updated!</string> <string name="last_7_days">Last 7 days</string>
<string name="last_30_days">Last 30 days</string>
<string name="last_365_days">Last 365 days</string>
<string name="sepia_element_duration">Duration</string>
<string name="duration_short"><![CDATA[Short (<4 min)]]></string>
<string name="duration_medium"><![CDATA[Medium (410 min)]]></string>
<string name="duration_long"><![CDATA[Long (> 10 min)]]></string>
<string name="display_all_categories">Display all categories</string>
<string name="display_all_licenses">Display all licenses</string>
<string name="display_all_languages">Display all languages</string>
<string name="all_of_these_tags">All of these tags</string>
<string name="one_of_these_tags">One of these tags</string>
<string name="apply_filter">Apply filter</string>
<string-array name="sort_by_array">
<item>Best match</item>
<item>Most recent</item>
<item>Least recent</item>
</string-array>
<string name="sort_by">Sort by</string>
<string name="sepia_search_hint">Keyword, channel, video, etc.</string>
<string name="sepia_indication">Sepia Search displays videos and channels that match your search but is not the publisher, nor the owner. If you notice any problems with a video, report it to the administrators on the PeerTube website where the video is published.</string>
<string name="my_videos">動画</string>
<string name="title">タイトル</string>
<string name="license">ライセンス</string>
<string name="category">カテゴリ</string>
<string name="language">言語</string>
<string name="peertube_nsfw">この動画は成人向けや過激な内容を含みます</string>
<string name="peertube_enable_comments">動画のコメントを有効にする</string>
<string name="description">説明</string>
<string name="toast_peertube_video_updated">動画を更新しました!</string>
<string name="register_account">Register an account</string> <string name="register_account">Register an account</string>
<string name="email_address">Email address</string> <string name="email_address">Email address</string>
<string name="preview">Preview</string> <string name="preview">Preview</string>
<string name="change_preview">Change preview</string> <string name="change_preview">Change preview</string>
<string name="name">Name</string> <string name="name">Name</string>
<string name="display_more">Display more</string> <string name="display_more">もっと見る</string>
<string name="no_channels">No channels!</string> <string name="no_channels">No channels!</string>
<string name="report_helper">Some explanations about your report…</string> <string name="report_helper">Some explanations about your report…</string>
<string name="report_video">Report video</string> <string name="report_video">Report video</string>
<string name="report">Report</string> <string name="report">報告</string>
<string name="change_instance">Pick another instance</string> <string name="change_instance">Pick another instance</string>
<string name="my_history">履歴</string> <string name="my_history">履歴</string>
<string name="edit">編集</string> <string name="edit">編集</string>
<string name="video_settings">Video settings</string> <string name="video_settings">Video settings</string>
<string name="app_interface">Interface</string> <string name="app_interface">インターフェイス</string>
<string name="set_cache_mode">Cache</string> <string name="set_cache_mode">キャッシュ</string>
<string name="set_video_cache_description">Définir le cache pour les vidéos (défaut 100Mo)</string> <string name="set_video_cache_description">Set the cache for videos (default 100Mb)</string>
<string name="set_video_quality_description">Define a default quality for videos</string> <string name="set_video_quality_description">Define a default quality for videos</string>
<string name="set_quality_mode">Resolution for videos</string> <string name="set_quality_mode">Resolution for videos</string>
<string name="video_cache_value">Video cache: %d Mb</string> <string name="video_cache_value">Video cache: %d Mb</string>
@ -115,6 +197,8 @@
<string name="pickup_captions">字幕を選択</string> <string name="pickup_captions">字幕を選択</string>
<string name="none">なし</string> <string name="none">なし</string>
<string name="set_video_mode_description">動画再生モードの変更を許可する(デフォルト、ストリーミングまたはブラウザ経由)。</string> <string name="set_video_mode_description">動画再生モードの変更を許可する(デフォルト、ストリーミングまたはブラウザ経由)。</string>
<string name="delete_account_comment">Delete account comments</string>
<string name="delete_account_comment_confirm">Are you sure you want to remove all the comments of this account?</string>
<string name="delete_video">動画を削除</string> <string name="delete_video">動画を削除</string>
<string name="delete_video_confirmation">この動画を本当に削除しますか?</string> <string name="delete_video_confirmation">この動画を本当に削除しますか?</string>
<string name="no_video_to_display">動画がありません!</string> <string name="no_video_to_display">動画がありません!</string>
@ -128,59 +212,77 @@
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b>が新しい動画を投稿しました: <b>%2$s</b>]]></string> <string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b>が新しい動画を投稿しました: <b>%2$s</b>]]></string>
<string name="peertube_video_blacklist"><![CDATA[<b>%1$s</b>がブラックリストに追加されました]]></string> <string name="peertube_video_blacklist"><![CDATA[<b>%1$s</b>がブラックリストに追加されました]]></string>
<string name="peertube_video_unblacklist"><![CDATA[<b>%1$s</b>がブラックリストから外されました]]></string> <string name="peertube_video_unblacklist"><![CDATA[<b>%1$s</b>がブラックリストから外されました]]></string>
<string name="peertube_video_report_success"><![CDATA[Your abuse report <b>%1$s</b> has been accepted]]></string>
<string name="peertube_video_abuse"><![CDATA[New abuse report for video: <b>%1$s</b>]]></string> <string name="peertube_video_abuse"><![CDATA[New abuse report for video: <b>%1$s</b>]]></string>
<string name="add_public_comment">パブリックコメントを追加</string> <string name="add_public_comment">パブリックコメントを追加</string>
<string name="send_comment">コメントを送信</string> <string name="send_comment">コメントを送信</string>
<string name="all">すべて</string> <string name="all">すべて</string>
<!-- end languages --> <!-- end languages -->
<string name="delete_history">Delete videos history</string>
<string name="delete_history_confirm">Are you sure you want to delete all your videos history?</string>
<string name="export_list">Export</string>
<string name="import_list">Import</string>
<string name="export_notification_title">Successful export!</string>
<string name="export_notification_content">Tap here to send the export by email</string>
<string name="export_notification_subjet">New Playlist</string>
<string name="export_notification_body">Open the attached file with TubeLab</string>
<string name="playlists">プレイリスト</string> <string name="playlists">プレイリスト</string>
<string name="no_playlist">No playlists</string>
<string name="display_name">表示名</string> <string name="display_name">表示名</string>
<string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string> <string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string>
<string name="error_display_name">You must provide a display name!</string> <string name="error_display_name">表示名を入力する必要があります!</string>
<string name="error_channel_mandatory">The channel is required when the playlist is public.</string> <string name="error_channel_mandatory">プレイリストがパブリックのときにはチャンネルが必要です。</string>
<string name="action_playlist_create">Create a playlist</string> <string name="action_playlist_create">プレイリストを作成</string>
<string name="action_playlist_empty_content">There is nothing in this playlist yet.</string> <string name="action_playlist_empty_content">プレイリストにはまだ何もありません。</string>
<string name="password_confirm">Confirm password</string> <string name="password_confirm">パスワードの確認</string>
<string name="agreement_check">I agree to %1$s and %2$s</string> <string name="agreement_check">%1$sと%2$sに同意する</string>
<string name="server_rules">server rules</string> <string name="server_rules">サーバーのルール</string>
<string name="tos">terms of service</string> <string name="tos">利用規約</string>
<string name="sign_up">Sign up</string> <string name="sign_up">新規登録</string>
<string name="all_field_filled">Please, fill all the fields!</string> <string name="all_field_filled">全ての欄を記入してください!</string>
<string name="password_error">Passwords don\'t match!</string> <string name="password_error">パスワードが一致しません!</string>
<string name="email_error">The email doesn\'t seem to be valid!</string> <string name="email_error">このメールアドレスは無効です!</string>
<string name="email_indicator">You will be sent a confirmation e-mail</string> <string name="email_indicator">確認メールを送信しました</string>
<string name="password_indicator">Use at least 8 characters</string> <string name="password_indicator">少なくとも8文字は入力してください</string>
<string name="password_too_short">Password should contain at least 8 characters</string> <string name="password_too_short">パスワードは8文字以上必要です</string>
<string name="username_error">Username should only contain letters, numbers and underscores</string> <string name="username_error">ユーザー名にはアルファベット、数字、アンダーバーのみ含めることができます</string>
<string name="account_created">Account created!</string> <string name="account_created">アカウントを作成しました!</string>
<string name="account_created_message"> Your account has been created!\n\n <string name="account_created_message"> Your account has been created!\n\n
Think to validate your email within the 48 next hours.\n\n Think to validate your email within the 48 next hours.\n\n
You can now connect your account by writing <b>%1$s</b> in the first field and tap on <b>Connect</b>.\n\n You can now connect your account by writing <b>%1$s</b> in the first field and tap on <b>Connect</b>.\n\n
<b>Important</b>: If your instance required validation, you will receive an email once it is validated! <b>Important</b>: If your instance required validation, you will receive an email once it is validated!
</string> </string>
<string name="account">Account</string> <string name="account">アカウント</string>
<string name="report_account">Report account</string> <string name="report_account">アカウントを報告</string>
<string-array name="settings_video_mode"> <string-array name="settings_video_mode">
<item>Webview</item> <item>標準</item>
<item>Direct stream</item> <item>WebView</item>
<item>Magnet</item>
<item>Torrent</item>
</string-array>
<string-array name="settings_theme">
<item>ライト</item>
<item>ダーク</item>
<item>Automatic</item>
</string-array> </string-array>
<string-array name="settings_video_quality"> <string-array name="settings_video_quality">
<item>High</item> <item>High</item>
<item>Medium</item> <item>Medium</item>
<item>Low</item> <item>Low</item>
</string-array> </string-array>
<string name="unfollow_confirm">Do you want to unfollow this account?</string> <string name="unfollow_confirm">このアカウントのフォローを解除しますか?</string>
<string name="title_video_peertube">Title for the video</string> <string name="title_video_peertube">動画のタイトル</string>
<string name="join_peertube">Join Peertube</string> <string name="join_peertube">Peertubeに参加</string>
<string name="agreement_check_peertube">I am at least 16 years old and agree to the %1$s of this instance</string> <string name="agreement_check_peertube">私は16歳以上で、インスタンスの %1$s に同意します。</string>
<string name="edit_profile">Edit profile</string> <string name="edit_profile">プロフィールを編集</string>
<string name="make_an_action">Make an action</string> <string name="make_an_action">アクションを作成</string>
<string name="action_unfollow">Unfollow</string> <string name="action_unfollow">フォロー解除</string>
<string name="display_nsfw_videos">Display sensitive videos</string> <string name="display_nsfw_videos">Display sensitive videos</string>
<string name="fullscreen">Fullscreen</string> <string name="fullscreen">Fullscreen</string>
<string name="bookmark_peertube_empty">There are no videos in your favourites!</string> <string name="bookmark_peertube_empty">There are no videos in your favourites!</string>
<string name="delete_channel">Remove channel</string> <string name="delete_channel">Remove channel</string>
<string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string> <string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string>
<string name="modify_playlists">Video in playlists</string>
<string name="no_muted">No muted accounts!</string> <string name="no_muted">No muted accounts!</string>
<string name="error_display_name_channel">You must define a name and a display name for this channel!</string> <string name="error_display_name_channel">You must define a name and a display name for this channel!</string>
<string name="action_channel_create">Create a channel</string> <string name="action_channel_create">Create a channel</string>
@ -196,12 +298,12 @@
<string name="edit_video">Edit video</string> <string name="edit_video">Edit video</string>
<string name="create_an_account">Create an account</string> <string name="create_an_account">Create an account</string>
<string name="followers_count">%1$s Subscribers</string> <string name="followers_count">%1$s Subscribers</string>
<string name="developer">Developer</string> <string name="developer">開発者</string>
<string name="about_vesrion">Release %1$s</string> <string name="about_vesrion">リリース %1$s</string>
<string name="about_the_app">About the app</string> <string name="about_the_app">このアプリについて</string>
<string name="Donate">Donate</string> <string name="Donate">寄付</string>
<string name="source_code">Source code</string> <string name="source_code">ソースコード</string>
<string name="issue_tracker">Issue tracker</string> <string name="issue_tracker">課題追跡</string>
<string name="action_instance_empty_content">No instances match these criteria</string> <string name="action_instance_empty_content">No instances match these criteria</string>
<string name="instances_picker">Instances picker</string> <string name="instances_picker">Instances picker</string>
<string name="pickup_instance">Pick this instance</string> <string name="pickup_instance">Pick this instance</string>
@ -212,7 +314,8 @@
<string name="pickup_categories">Pick categories</string> <string name="pickup_categories">Pick categories</string>
<string name="pickup_languages">Pick languages</string> <string name="pickup_languages">Pick languages</string>
<string name="notification_channel_name">Update information</string> <string name="notification_channel_name">Update information</string>
<string name="add_account">Add an account</string> <string name="fetch_notification_channel_name">Fetch notifications</string>
<string name="add_account">アカウントを追加</string>
<string name="list_of_accounts">List of accounts</string> <string name="list_of_accounts">List of accounts</string>
<string name="pause">Pause</string> <string name="pause">Pause</string>
<string name="play">Play</string> <string name="play">Play</string>

View File

@ -1,15 +1,50 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"> <resources xmlns:tools="http://schemas.android.com/tools">
<string name="title_home">Home</string> <string name="set_video_in_list">Videos in list</string>
<string name="set_video_in_list_description">Change the layout for displaying videos in a list</string>
<string name="no_instances">No instances !</string>
<string name="show_more">Show more</string>
<string name="show_less">Show less</string>
<string name="set_play_screen_lock">Screen lock</string>
<string name="set_play_screen_lock_description">Keep playing videos when the screen is locked</string>
<string name="save">Save</string>
<string name="enable_history">Enable history</string>
<string name="change_profile_picture">Change profile picture</string>
<string name="set_autoplay">Automatic playback</string>
<string name="set_autoplay_description">If enabled, videos will be played automatically</string>
<string name="set_fullscreen">Fullscreen</string>
<string name="set_fullscreen_description">Automatically open videos in fullscreen</string>
<string name="set_autoplay_next_video">Automatically start playing the next video</string>
<string name="set_autoplay_next_video_description">When a video ends, follow up with the next suggested video.</string>
<string name="add_public_reply">Add a public reply</string>
<string name="activity">Activity</string>
<string name="app">App</string>
<string name="notif_new_video">New video from your subscriptions</string>
<string name="notif_new_comment">New comment on your video</string>
<string name="notif_blocked">One of your video is blocked/unblocked</string>
<string name="notif_video_published">Video published (after transcoding/scheduled update)</string>
<string name="notif_video_imported">Video import finished</string>
<string name="notif_new_followers">You or your channel(s) has a new follower</string>
<string name="notif_video_mention">Someone mentioned you in video comments</string>
<string name="notif_abuse_received">An abuse report received a new message</string>
<string name="notif_abuse_accepted">One of your abuse reports has been accepted or rejected by moderators</string>
<plurals name="number_of_replies">
<item quantity="other">답글 %d개</item>
</plurals>
<string name="reply">Reply</string>
<string name="set_theme">테마</string>
<string name="set_theme_description">Allow to change app theme</string>
<string name="federation_issue">The video cannot be federated!</string>
<string name="title_home"></string>
<string name="title_local">Local</string> <string name="title_local">Local</string>
<string name="title_discover">Discover</string> <string name="title_discover">Discover</string>
<string name="title_notifications">Notifications</string> <string name="title_notifications">알림</string>
<string name="title_recently_added">Recently added</string> <string name="title_recently_added">Recently added</string>
<string name="title_trending">Trending</string> <string name="title_trending">Trending</string>
<string name="title_most_liked">Most liked</string> <string name="title_most_liked">Most liked</string>
<string name="toast_error">Oops! An error occurred!</string> <string name="toast_error">Oops! An error occurred!</string>
<string name="title_muted">Muted</string> <string name="title_muted">Muted</string>
<string name="title_channel">Channels</string> <string name="title_channel">채널</string>
<string name="do_not_list">Do not list</string> <string name="do_not_list">Do not list</string>
<string name="blur">Blur</string> <string name="blur">Blur</string>
<string name="display">Display</string> <string name="display">Display</string>
@ -18,96 +53,143 @@
<string name="not_valide_instance">This instance does not seem to be valid!</string> <string name="not_valide_instance">This instance does not seem to be valid!</string>
<string name="no_videos">No videos!</string> <string name="no_videos">No videos!</string>
<string name="no_notifications">No notifications!</string> <string name="no_notifications">No notifications!</string>
<string name="favicon">Favicon</string> <string name="favicon">파비콘</string>
<string name="open_with">Open with</string> <string name="open_with">다음으로 열기</string>
<string name="action_playlist_edit">Edit a playlist</string> <string name="action_playlist_edit">Edit a playlist</string>
<string name="close">Close</string> <string name="close">닫기</string>
<string name="upload_video">Upload</string> <string name="upload_video">Upload</string>
<string name="image_preview">Image preview</string> <string name="image_preview">Image preview</string>
<string name="file_to_upload">Select the file to upload</string> <string name="file_to_upload">Select the file to upload</string>
<string name="channel">Channel</string> <string name="new_video">New video</string>
<string name="videos">Videos</string> <string name="new_blacklist">New blacklist info</string>
<string name="channels">Channels</string> <string name="new_my_video_published">Your video is published</string>
<string name="yes">Yes</string> <string name="new_my_video_error">Error when publishing your video</string>
<string name="no">No</string> <string name="new_comment">New comment</string>
<string name="cancel">Cancel</string> <string name="new_follow">New follow</string>
<string name="download">Download</string> <string name="channel">채널</string>
<string name="profile_picture">Profile picture</string> <string name="videos">동영상</string>
<string name="channels">채널</string>
<string name="refresh_every">Fetch every:</string>
<string-array name="refresh_time">
<item>Never</item>
<item>15 minutes</item>
<item>30 minutes</item>
<item>1 hour</item>
<item>2 hours</item>
<item>6 hours</item>
<item>12 hours</item>
</string-array>
<string name="yes"></string>
<string name="no">아니</string>
<string name="cancel">취소</string>
<string name="download">다운로드</string>
<string name="profile_picture">프로필 사진</string>
<string name="update_video">Update video</string> <string name="update_video">Update video</string>
<string name="date_seconds">%d s</string> <string name="remove_from_playlist">Remove from playlist</string>
<string name="date_minutes">%d m</string> <string name="date_seconds">%d </string>
<string name="date_hours">%d h</string> <string name="date_minutes">%d </string>
<string name="date_day">%d d</string> <string name="date_hours">%d </string>
<string name="date_day">%d 일</string>
<string name="number_view_video">%s views</string> <string name="number_view_video">%s views</string>
<string name="title_instance_login">Instance host</string> <string name="title_instance_login">Instance host</string>
<string name="uploading">Uploading, please wait…</string> <string name="uploading">Uploading, please wait…</string>
<string name="upload_video_success">The video has been uploaded!</string> <string name="upload_video_success">The video has been uploaded!</string>
<string name="toast_cancelled">Upload cancelled!</string> <string name="toast_cancelled">Upload cancelled!</string>
<string name="video_uploaded_action">Tap here to edit the video data.</string> <string name="video_uploaded_action">Tap here to edit the video data.</string>
<string name="toot_select_image_error">An error occurred while selecting the media!</string> <string name="toot_select_image_error">미디어를 선택하는 도중 오류가 발생하였습니다!</string>
<string name="download_file">Download %1$s</string> <string name="download_file">다운로드 %1$s</string>
<string name="action_privacy">Privacy</string> <string name="account_updated">The account has been updated!</string>
<string name="action_logout">Logout</string> <string name="action_privacy">개인정보</string>
<string name="login">Login</string> <string name="action_logout">로그아웃</string>
<string name="password">Password</string> <string name="login">로그인</string>
<string name="email">Email</string> <string name="password">비밀번호</string>
<string name="tags">Tags</string> <string name="email">이메일</string>
<string name="validate">Validate</string> <string name="tags">태그</string>
<string name="share_with">Share with</string> <string name="validate">확인</string>
<string name="share_with">공유</string>
<string name="shared_via">Shared via TubeLab</string> <string name="shared_via">Shared via TubeLab</string>
<string name="username">User name</string> <string name="username">사용자명</string>
<string name="settings">Settings</string> <string name="settings">설정</string>
<string name="logout_account_confirmation">Are you sure you want to logout @%1$s@%2$s?</string> <string name="logout_account_confirmation">Are you sure you want to logout @%1$s@%2$s?</string>
<string name="following">Following</string> <string name="following">팔로잉</string>
<string name="followers">Followers</string> <string name="followers">팔로워</string>
<string name="client_error">Unable to get client id!</string> <string name="client_error">클라이언트 ID를 얻을 수 없습니다!</string>
<string name="toast_error_loading_account">An error occurred while switching between accounts!</string> <string name="toast_error_loading_account">An error occurred while switching between accounts!</string>
<string name="toast_error_search">An error occurred while searching!</string> <string name="toast_error_search">An error occurred while searching!</string>
<string name="nothing_to_do">No action can be taken</string> <string name="nothing_to_do">아무 조치를 취할 수 없습니다</string>
<string name="action_follow">Follow</string> <string name="action_follow">팔로우</string>
<string name="action_mute">Mute</string> <string name="action_mute">뮤트</string>
<string name="search">Search</string> <string name="search">검색</string>
<string name="delete">Delete</string> <string name="delete">삭제</string>
<string name="action_lists_confirm_delete">Are you sure you want to permanently delete this list?</string> <string name="action_lists_confirm_delete">이 리스트를 정말로 영원히 삭제하시겠습니까?</string>
<string name="action_lists_delete">Delete list</string> <string name="action_lists_delete">리스트 삭제</string>
<string name="no_comments">Be the first to leave a comment on this video with the top right button!</string> <string name="no_comments">Be the first to leave a comment on this video with the top right button!</string>
<string name="comment_no_allowed_peertube">Comments are not enabled on this video!</string> <string name="comment_no_allowed_peertube">Comments are not enabled on this video!</string>
<string name="pickup_resolution">Pick up a resolution</string> <string name="pickup_resolution">Pick up a resolution</string>
<string name="bookmark_add_peertube">The video has been added to bookmarks!</string> <string name="bookmark_add_peertube">The video has been added to bookmarks!</string>
<string name="bookmark_remove_peertube">The video has been removed from bookmarks!</string> <string name="bookmark_remove_peertube">The video has been removed from bookmarks!</string>
<string name="information" tools:ignore="UnusedResources">Information</string> <string name="information" tools:ignore="UnusedResources">정보</string>
<string name="app_logo">Logo of the application</string> <string name="app_logo">응용프로그램 로고</string>
<!-- languages not translated --> <!-- languages not translated -->
<string name="subscriptions">Subscriptions</string> <string name="subscriptions">Subscriptions</string>
<string name="delete_instance">Delete an instance</string>
<string name="delete_instance_confirm">Are you sure to delete this instance?</string>
<string name="delete_comment">Delete a comment</string> <string name="delete_comment">Delete a comment</string>
<string name="delete_comment_confirm">Are you sure to delete this comment?</string> <string name="delete_comment_confirm">Are you sure to delete this comment?</string>
<string name="set_video_mode">Mode for videos</string> <string name="set_video_mode">Mode for videos</string>
<string name="filter">필터</string>
<string name="sepia_search">Sepia search</string>
<string name="sepia_element_nsfw">Display sensitive content</string>
<string name="sepia_element_published_date">Published date</string>
<string name="any">Any</string>
<string name="today">Today</string>
<string name="last_7_days">Last 7 days</string>
<string name="last_30_days">Last 30 days</string>
<string name="last_365_days">Last 365 days</string>
<string name="sepia_element_duration">Duration</string>
<string name="duration_short"><![CDATA[Short (<4 min)]]></string>
<string name="duration_medium"><![CDATA[Medium (410 min)]]></string>
<string name="duration_long"><![CDATA[Long (> 10 min)]]></string>
<string name="display_all_categories">Display all categories</string>
<string name="display_all_licenses">Display all licenses</string>
<string name="display_all_languages">Display all languages</string>
<string name="all_of_these_tags">All of these tags</string>
<string name="one_of_these_tags">One of these tags</string>
<string name="apply_filter">Apply filter</string>
<string-array name="sort_by_array">
<item>Best match</item>
<item>Most recent</item>
<item>Least recent</item>
</string-array>
<string name="sort_by">Sort by</string>
<string name="sepia_search_hint">Keyword, channel, video, etc.</string>
<string name="sepia_indication">Sepia Search displays videos and channels that match your search but is not the publisher, nor the owner. If you notice any problems with a video, report it to the administrators on the PeerTube website where the video is published.</string>
<string name="my_videos">My videos</string> <string name="my_videos">My videos</string>
<string name="title">Title</string> <string name="title">제목</string>
<string name="license">License</string> <string name="license">License</string>
<string name="category">Category</string> <string name="category">Category</string>
<string name="language">Language</string> <string name="language">언어</string>
<string name="peertube_nsfw">This video contains mature or explicit content</string> <string name="peertube_nsfw">This video contains mature or explicit content</string>
<string name="peertube_enable_comments">Enable video comments</string> <string name="peertube_enable_comments">Enable video comments</string>
<string name="description">Description</string> <string name="description">설명</string>
<string name="toast_peertube_video_updated">The video has been updated!</string> <string name="toast_peertube_video_updated">The video has been updated!</string>
<string name="register_account">Register an account</string> <string name="register_account">Register an account</string>
<string name="email_address">Email address</string> <string name="email_address">Email address</string>
<string name="preview">Preview</string> <string name="preview">Preview</string>
<string name="change_preview">Change preview</string> <string name="change_preview">Change preview</string>
<string name="name">Name</string> <string name="name">Name</string>
<string name="display_more">Display more</string> <string name="display_more">더 보기</string>
<string name="no_channels">No channels!</string> <string name="no_channels">No channels!</string>
<string name="report_helper">Some explanations about your report…</string> <string name="report_helper">Some explanations about your report…</string>
<string name="report_video">Report video</string> <string name="report_video">Report video</string>
<string name="report">Report</string> <string name="report">신고</string>
<string name="change_instance">Pick another instance</string> <string name="change_instance">Pick another instance</string>
<string name="my_history">History</string> <string name="my_history">내역</string>
<string name="edit">Edit</string> <string name="edit">Edit</string>
<string name="video_settings">Video settings</string> <string name="video_settings">Video settings</string>
<string name="app_interface">Interface</string> <string name="app_interface">인터페이스</string>
<string name="set_cache_mode">Cache</string> <string name="set_cache_mode">캐시</string>
<string name="set_video_cache_description">Définir le cache pour les vidéos (défaut 100Mo)</string> <string name="set_video_cache_description">Set the cache for videos (default 100Mb)</string>
<string name="set_video_quality_description">Define a default quality for videos</string> <string name="set_video_quality_description">Define a default quality for videos</string>
<string name="set_quality_mode">Resolution for videos</string> <string name="set_quality_mode">Resolution for videos</string>
<string name="video_cache_value">Video cache: %d Mb</string> <string name="video_cache_value">Video cache: %d Mb</string>
@ -115,10 +197,12 @@
<string name="pickup_captions">Pick captions</string> <string name="pickup_captions">Pick captions</string>
<string name="none">None</string> <string name="none">None</string>
<string name="set_video_mode_description">Allows to change mode for playing videos (default, streaming or via a browser).</string> <string name="set_video_mode_description">Allows to change mode for playing videos (default, streaming or via a browser).</string>
<string name="delete_account_comment">Delete account comments</string>
<string name="delete_account_comment_confirm">Are you sure you want to remove all the comments of this account?</string>
<string name="delete_video">Delete video</string> <string name="delete_video">Delete video</string>
<string name="delete_video_confirmation">Are you sure to delete this video?</string> <string name="delete_video_confirmation">Are you sure to delete this video?</string>
<string name="no_video_to_display">No videos to display!</string> <string name="no_video_to_display">No videos to display!</string>
<string name="share">Share</string> <string name="share">공유</string>
<string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> commented your video <b>%2$s</b>]]></string> <string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> commented your video <b>%2$s</b>]]></string>
<string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> is following your channel <b>%2$s</b>]]></string> <string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> is following your channel <b>%2$s</b>]]></string>
<string name="peertube_follow_account"><![CDATA[<b>%1$s</b> is following your account]]></string> <string name="peertube_follow_account"><![CDATA[<b>%1$s</b> is following your account]]></string>
@ -128,13 +212,23 @@
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> published a new video: <b>%2$s</b>]]></string> <string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> published a new video: <b>%2$s</b>]]></string>
<string name="peertube_video_blacklist"><![CDATA[Your video <b>%1$s</b> has been blacklisted]]></string> <string name="peertube_video_blacklist"><![CDATA[Your video <b>%1$s</b> has been blacklisted]]></string>
<string name="peertube_video_unblacklist"><![CDATA[Your video <b>%1$s</b> has been unblacklisted]]></string> <string name="peertube_video_unblacklist"><![CDATA[Your video <b>%1$s</b> has been unblacklisted]]></string>
<string name="peertube_video_report_success"><![CDATA[Your abuse report <b>%1$s</b> has been accepted]]></string>
<string name="peertube_video_abuse"><![CDATA[New abuse report for video: <b>%1$s</b>]]></string> <string name="peertube_video_abuse"><![CDATA[New abuse report for video: <b>%1$s</b>]]></string>
<string name="add_public_comment">Add a public comment</string> <string name="add_public_comment">공개 댓글 추가</string>
<string name="send_comment">Send comment</string> <string name="send_comment">댓글 보내기</string>
<string name="all">All</string> <string name="all">모두</string>
<!-- end languages --> <!-- end languages -->
<string name="playlists">Playlists</string> <string name="delete_history">Delete videos history</string>
<string name="display_name">Display name</string> <string name="delete_history_confirm">Are you sure you want to delete all your videos history?</string>
<string name="export_list">Export</string>
<string name="import_list">Import</string>
<string name="export_notification_title">Successful export!</string>
<string name="export_notification_content">Tap here to send the export by email</string>
<string name="export_notification_subjet">New Playlist</string>
<string name="export_notification_body">Open the attached file with TubeLab</string>
<string name="playlists">재생목록</string>
<string name="no_playlist">No playlists</string>
<string name="display_name">표시되는 이름</string>
<string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string> <string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string>
<string name="error_display_name">You must provide a display name!</string> <string name="error_display_name">You must provide a display name!</string>
<string name="error_channel_mandatory">The channel is required when the playlist is public.</string> <string name="error_channel_mandatory">The channel is required when the playlist is public.</string>
@ -161,8 +255,15 @@
<string name="account">Account</string> <string name="account">Account</string>
<string name="report_account">Report account</string> <string name="report_account">Report account</string>
<string-array name="settings_video_mode"> <string-array name="settings_video_mode">
<item>보통</item>
<item>Webview</item> <item>Webview</item>
<item>Direct stream</item> <item>Magnet</item>
<item>Torrent</item>
</string-array>
<string-array name="settings_theme">
<item>밝음</item>
<item>어두움</item>
<item>Automatic</item>
</string-array> </string-array>
<string-array name="settings_video_quality"> <string-array name="settings_video_quality">
<item>High</item> <item>High</item>
@ -173,14 +274,15 @@
<string name="title_video_peertube">Title for the video</string> <string name="title_video_peertube">Title for the video</string>
<string name="join_peertube">Join Peertube</string> <string name="join_peertube">Join Peertube</string>
<string name="agreement_check_peertube">I am at least 16 years old and agree to the %1$s of this instance</string> <string name="agreement_check_peertube">I am at least 16 years old and agree to the %1$s of this instance</string>
<string name="edit_profile">Edit profile</string> <string name="edit_profile">프로필 수정</string>
<string name="make_an_action">Make an action</string> <string name="make_an_action">Make an action</string>
<string name="action_unfollow">Unfollow</string> <string name="action_unfollow">언팔로우</string>
<string name="display_nsfw_videos">Display sensitive videos</string> <string name="display_nsfw_videos">Display sensitive videos</string>
<string name="fullscreen">Fullscreen</string> <string name="fullscreen">Fullscreen</string>
<string name="bookmark_peertube_empty">There are no videos in your favourites!</string> <string name="bookmark_peertube_empty">There are no videos in your favourites!</string>
<string name="delete_channel">Remove channel</string> <string name="delete_channel">Remove channel</string>
<string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string> <string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string>
<string name="modify_playlists">Video in playlists</string>
<string name="no_muted">No muted accounts!</string> <string name="no_muted">No muted accounts!</string>
<string name="error_display_name_channel">You must define a name and a display name for this channel!</string> <string name="error_display_name_channel">You must define a name and a display name for this channel!</string>
<string name="action_channel_create">Create a channel</string> <string name="action_channel_create">Create a channel</string>
@ -196,8 +298,8 @@
<string name="edit_video">Edit video</string> <string name="edit_video">Edit video</string>
<string name="create_an_account">Create an account</string> <string name="create_an_account">Create an account</string>
<string name="followers_count">%1$s Subscribers</string> <string name="followers_count">%1$s Subscribers</string>
<string name="developer">Developer</string> <string name="developer">개발자</string>
<string name="about_vesrion">Release %1$s</string> <string name="about_vesrion">릴리즈 %1$s</string>
<string name="about_the_app">About the app</string> <string name="about_the_app">About the app</string>
<string name="Donate">Donate</string> <string name="Donate">Donate</string>
<string name="source_code">Source code</string> <string name="source_code">Source code</string>
@ -212,7 +314,8 @@
<string name="pickup_categories">Pick categories</string> <string name="pickup_categories">Pick categories</string>
<string name="pickup_languages">Pick languages</string> <string name="pickup_languages">Pick languages</string>
<string name="notification_channel_name">Update information</string> <string name="notification_channel_name">Update information</string>
<string name="add_account">Add an account</string> <string name="fetch_notification_channel_name">Fetch notifications</string>
<string name="add_account">계정 추가</string>
<string name="list_of_accounts">List of accounts</string> <string name="list_of_accounts">List of accounts</string>
<string name="pause">Pause</string> <string name="pause">Pause</string>
<string name="play">Play</string> <string name="play">Play</string>

View File

@ -1,7 +1,43 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"> <resources xmlns:tools="http://schemas.android.com/tools">
<string name="set_video_in_list">Video lijst</string>
<string name="set_video_in_list_description">Wijzig de lay-out voor het weergeven van video\'s in een lijst</string>
<string name="no_instances">Geen instanties !</string>
<string name="show_more">Meer weergeven</string>
<string name="show_less">Minder weergeven</string>
<string name="set_play_screen_lock">Schermvergrendeling</string>
<string name="set_play_screen_lock_description">Video\'s laten doorspelen terwijl het scherm vergrendeld is</string>
<string name="save">Opslaan</string>
<string name="enable_history">Geschiedenis inschakelen</string>
<string name="change_profile_picture">Profielfoto wijzigen</string>
<string name="set_autoplay">Automatisch afspelen</string>
<string name="set_autoplay_description">Als deze optie is ingeschakeld, worden de video\'s automatisch afgespeeld</string>
<string name="set_fullscreen">Volledig scherm</string>
<string name="set_fullscreen_description">Video\'s automatisch openen op volledig scherm</string>
<string name="set_autoplay_next_video">De volgende video automatisch afspelen</string>
<string name="set_autoplay_next_video_description">Wanneer een video eindigt, begin dan met de volgende voorgestelde video.</string>
<string name="add_public_reply">Voeg een openbaar antwoord toe</string>
<string name="activity">Activiteit</string>
<string name="app">App</string>
<string name="notif_new_video">Nieuwe video uit uw abonnementen</string>
<string name="notif_new_comment">Nieuwe reactie op je video</string>
<string name="notif_blocked">Een van je video\'s is geblokkeerd/gedeblokkeerd</string>
<string name="notif_video_published">Video gepubliceerd (na transcoderen/geplande update)</string>
<string name="notif_video_imported">Video import voltooid</string>
<string name="notif_new_followers">U of één van uw kanalen heeft een nieuwe volger</string>
<string name="notif_video_mention">Iemand heeft je genoemd in een reactie op een video</string>
<string name="notif_abuse_received">Een misbruik rapport heeft een nieuw bericht ontvangen</string>
<string name="notif_abuse_accepted">Een van uw misbruikmeldingen is geaccepteerd of afgewezen door de moderators</string>
<plurals name="number_of_replies">
<item quantity="one">%d antwoord</item>
<item quantity="other">%d reacties</item>
</plurals>
<string name="reply">Antwoord</string>
<string name="set_theme">Thema</string>
<string name="set_theme_description">Laat het thema van de app wijzigen</string>
<string name="federation_issue">De video kan niet gefedereerd worden!</string>
<string name="title_home">Home</string> <string name="title_home">Home</string>
<string name="title_local">Local</string> <string name="title_local">Lokaal</string>
<string name="title_discover">Ontdek</string> <string name="title_discover">Ontdek</string>
<string name="title_notifications">Meldingen</string> <string name="title_notifications">Meldingen</string>
<string name="title_recently_added">Onlangs toegevoegd</string> <string name="title_recently_added">Onlangs toegevoegd</string>
@ -17,7 +53,7 @@
<string name="instance_choice">Kies een instantie</string> <string name="instance_choice">Kies een instantie</string>
<string name="not_valide_instance">Dit geval lijkt niet geldig te zijn!</string> <string name="not_valide_instance">Dit geval lijkt niet geldig te zijn!</string>
<string name="no_videos">Geen video\'s!</string> <string name="no_videos">Geen video\'s!</string>
<string name="no_notifications">No notifications!</string> <string name="no_notifications">Geen meldingen!</string>
<string name="favicon">Favicon</string> <string name="favicon">Favicon</string>
<string name="open_with">Open met</string> <string name="open_with">Open met</string>
<string name="action_playlist_edit">Bewerk een afspeellijst</string> <string name="action_playlist_edit">Bewerk een afspeellijst</string>
@ -25,20 +61,37 @@
<string name="upload_video">Uploaden</string> <string name="upload_video">Uploaden</string>
<string name="image_preview">Beeld preview</string> <string name="image_preview">Beeld preview</string>
<string name="file_to_upload">Selecteer het te uploaden bestand</string> <string name="file_to_upload">Selecteer het te uploaden bestand</string>
<string name="new_video">Nieuwe video</string>
<string name="new_blacklist">Nieuwe blacklist informatie</string>
<string name="new_my_video_published">Je video is gepubliceerd</string>
<string name="new_my_video_error">Fout bij het publiceren van je video</string>
<string name="new_comment">Nieuwe reactie</string>
<string name="new_follow">Nieuwe volger</string>
<string name="channel">Kanaal</string> <string name="channel">Kanaal</string>
<string name="videos">Video\'s</string> <string name="videos">Video\'s</string>
<string name="channels">Kanalen</string> <string name="channels">Kanalen</string>
<string name="refresh_every">Ververs elke:</string>
<string-array name="refresh_time">
<item>Nooit</item>
<item>15 minuten</item>
<item>30 minuten</item>
<item>1 uur</item>
<item>2 uren</item>
<item>6 uren</item>
<item>12 uren</item>
</string-array>
<string name="yes">Ja</string> <string name="yes">Ja</string>
<string name="no">Geen</string> <string name="no">Geen</string>
<string name="cancel">Annuleer</string> <string name="cancel">Annuleren</string>
<string name="download">Download</string> <string name="download">Download</string>
<string name="profile_picture">Profiel foto</string> <string name="profile_picture">Profiel foto</string>
<string name="update_video">Video bijwerken</string> <string name="update_video">Video bijwerken</string>
<string name="remove_from_playlist">Verwijderen uit de playlist</string>
<string name="date_seconds">%d s</string> <string name="date_seconds">%d s</string>
<string name="date_minutes">%d m</string> <string name="date_minutes">%d m</string>
<string name="date_hours">%d h</string> <string name="date_hours">%d h</string>
<string name="date_day">%d d</string> <string name="date_day">%d d</string>
<string name="number_view_video">%s aanzichten</string> <string name="number_view_video">%s weergaven</string>
<string name="title_instance_login">Instantie host</string> <string name="title_instance_login">Instantie host</string>
<string name="uploading">Uploaden, wacht even…</string> <string name="uploading">Uploaden, wacht even…</string>
<string name="upload_video_success">De video is geüpload!</string> <string name="upload_video_success">De video is geüpload!</string>
@ -46,6 +99,7 @@
<string name="video_uploaded_action">Tik hier om de videogegevens te bewerken.</string> <string name="video_uploaded_action">Tik hier om de videogegevens te bewerken.</string>
<string name="toot_select_image_error">Er is een fout opgetreden bij het selecteren van de media!</string> <string name="toot_select_image_error">Er is een fout opgetreden bij het selecteren van de media!</string>
<string name="download_file">Download %1$s</string> <string name="download_file">Download %1$s</string>
<string name="account_updated">Het account is bijgewerkt!</string>
<string name="action_privacy">Privacy</string> <string name="action_privacy">Privacy</string>
<string name="action_logout">Uitloggen</string> <string name="action_logout">Uitloggen</string>
<string name="login">Inloggen</string> <string name="login">Inloggen</string>
@ -71,7 +125,7 @@
<string name="action_lists_confirm_delete">Weet u zeker dat u deze lijst permanent wilt verwijderen?</string> <string name="action_lists_confirm_delete">Weet u zeker dat u deze lijst permanent wilt verwijderen?</string>
<string name="action_lists_delete">Lijst verwijderen</string> <string name="action_lists_delete">Lijst verwijderen</string>
<string name="no_comments">Laat als eerste een reactie achter op deze video met de knop rechtsboven!</string> <string name="no_comments">Laat als eerste een reactie achter op deze video met de knop rechtsboven!</string>
<string name="comment_no_allowed_peertube">Commentaar is niet ingeschakeld op deze video!</string> <string name="comment_no_allowed_peertube">Reacties zijn niet ingeschakeld op deze video!</string>
<string name="pickup_resolution">Neem een resolutie op</string> <string name="pickup_resolution">Neem een resolutie op</string>
<string name="bookmark_add_peertube">De video is toegevoegd aan de bladwijzers!</string> <string name="bookmark_add_peertube">De video is toegevoegd aan de bladwijzers!</string>
<string name="bookmark_remove_peertube">De video is uit de bladwijzers verwijderd!</string> <string name="bookmark_remove_peertube">De video is uit de bladwijzers verwijderd!</string>
@ -79,9 +133,38 @@
<string name="app_logo">Logo van de applicatie</string> <string name="app_logo">Logo van de applicatie</string>
<!-- languages not translated --> <!-- languages not translated -->
<string name="subscriptions">Abonnementen</string> <string name="subscriptions">Abonnementen</string>
<string name="delete_instance">Een instantie vewijderen</string>
<string name="delete_instance_confirm">Weet u zeker dat u deze instantie wilt verijderen?</string>
<string name="delete_comment">Een opmerking verwijderen</string> <string name="delete_comment">Een opmerking verwijderen</string>
<string name="delete_comment_confirm">Weet u zeker dat u deze opmerking wilt verwijderen?</string> <string name="delete_comment_confirm">Weet u zeker dat u deze reactie wilt verwijderen?</string>
<string name="set_video_mode">Modus voor video\'s</string> <string name="set_video_mode">Modus voor video\'s</string>
<string name="filter">Filter</string>
<string name="sepia_search">Sepia zoeken</string>
<string name="sepia_element_nsfw">Gevoelige inhoud tonen</string>
<string name="sepia_element_published_date">Gepubliceerde datum</string>
<string name="any">Elke</string>
<string name="today">Vandaag</string>
<string name="last_7_days">Laatste 7 dagen</string>
<string name="last_30_days">Laatste 30 dagen</string>
<string name="last_365_days">Laatste 365 dagen</string>
<string name="sepia_element_duration">Duur</string>
<string name="duration_short"><![CDATA[Kort (<4 min)]]></string>
<string name="duration_medium"><![CDATA[Medium (4-10 min.)]]></string>
<string name="duration_long"><![CDATA[Lang (> 10 min.)]]></string>
<string name="display_all_categories">Alle categorieën weergeven</string>
<string name="display_all_licenses">Alle licenties weergeven</string>
<string name="display_all_languages">Alle talen weergeven</string>
<string name="all_of_these_tags">Al deze tags</string>
<string name="one_of_these_tags">Een van deze tags</string>
<string name="apply_filter">Filter toepassen</string>
<string-array name="sort_by_array">
<item>Beste overeenkomst</item>
<item>Meest recente</item>
<item>Minst recent</item>
</string-array>
<string name="sort_by">Sorteer op</string>
<string name="sepia_search_hint">Trefwoord, kanaal, video, etc.</string>
<string name="sepia_indication">Sepia Search geeft video\'s en kanalen weer die overeenkomen met uw zoekopdracht, maar is niet de uitgever, noch de eigenaar. Als je problemen met een video opmerkt, rapporteer deze dan aan de beheerders op de PeerTube website waar de video wordt gepubliceerd.</string>
<string name="my_videos">Mijn video\'s</string> <string name="my_videos">Mijn video\'s</string>
<string name="title">Titel</string> <string name="title">Titel</string>
<string name="license">Licentie</string> <string name="license">Licentie</string>
@ -104,17 +187,19 @@
<string name="change_instance">Kies een andere instantie</string> <string name="change_instance">Kies een andere instantie</string>
<string name="my_history">Geschiedenis</string> <string name="my_history">Geschiedenis</string>
<string name="edit">Bewerk</string> <string name="edit">Bewerk</string>
<string name="video_settings">Video settings</string> <string name="video_settings">Video instellingen</string>
<string name="app_interface">Interface</string> <string name="app_interface">Interface</string>
<string name="set_cache_mode">Cache</string> <string name="set_cache_mode">Cache</string>
<string name="set_video_cache_description">Définir le cache pour les vidéos (défaut 100Mo)</string> <string name="set_video_cache_description">Stel de cache voor video\'s in (standaard 100Mb)</string>
<string name="set_video_quality_description">Define a default quality for videos</string> <string name="set_video_quality_description">Definieer een standaardkwaliteit voor video\'s</string>
<string name="set_quality_mode">Resolution for videos</string> <string name="set_quality_mode">Resolutie voor video\'s</string>
<string name="video_cache_value">Video cache: %d Mb</string> <string name="video_cache_value">Videocache: %d Mb</string>
<string name="captions">Bijschriften</string> <string name="captions">Bijschriften</string>
<string name="pickup_captions">Pick captions</string> <string name="pickup_captions">Pick captions</string>
<string name="none">Geen</string> <string name="none">Geen</string>
<string name="set_video_mode_description">Maakt het mogelijk om van modus te veranderen voor het afspelen van video\'s (standaard, streaming of via een browser).</string> <string name="set_video_mode_description">Maakt het mogelijk om van modus te veranderen voor het afspelen van video\'s (standaard, streaming of via een browser).</string>
<string name="delete_account_comment">Account opmerkingen verwijderen</string>
<string name="delete_account_comment_confirm">Weet u zeker dat u alle reacties van dit account wilt verwijderen?</string>
<string name="delete_video">Video verwijderen</string> <string name="delete_video">Video verwijderen</string>
<string name="delete_video_confirmation">Weet u zeker dat u deze video wilt verwijderen?</string> <string name="delete_video_confirmation">Weet u zeker dat u deze video wilt verwijderen?</string>
<string name="no_video_to_display">Geen video\'s te tonen!</string> <string name="no_video_to_display">Geen video\'s te tonen!</string>
@ -128,12 +213,22 @@
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> publiceerde een nieuwe video: <b>%2$s</b>]]></string> <string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> publiceerde een nieuwe video: <b>%2$s</b>]]></string>
<string name="peertube_video_blacklist"><![CDATA[Uw video <b>%1$s</b> is op de zwarte lijst geplaatst]]></string> <string name="peertube_video_blacklist"><![CDATA[Uw video <b>%1$s</b> is op de zwarte lijst geplaatst]]></string>
<string name="peertube_video_unblacklist"><![CDATA[Uw video <b>%1$s</b> is niet op de zwarte lijst gezet]]></string> <string name="peertube_video_unblacklist"><![CDATA[Uw video <b>%1$s</b> is niet op de zwarte lijst gezet]]></string>
<string name="peertube_video_abuse"><![CDATA[New abuse report for video: <b>%1$s</b>]]></string> <string name="peertube_video_report_success"><![CDATA[Uw misbruik melding <b>%1$s</b> is geaccepteerd]]></string>
<string name="peertube_video_abuse"><![CDATA[Nieuw misbruikrapport voor video: <b>%1$s</b>]]></string>
<string name="add_public_comment">Voeg een publieke opmerking toe</string> <string name="add_public_comment">Voeg een publieke opmerking toe</string>
<string name="send_comment">Stuur commentaar</string> <string name="send_comment">Reactie versturen</string>
<string name="all">Allemaal</string> <string name="all">Allemaal</string>
<!-- end languages --> <!-- end languages -->
<string name="delete_history">Delete videos history</string>
<string name="delete_history_confirm">Are you sure you want to delete all your videos history?</string>
<string name="export_list">Exporteren</string>
<string name="import_list">Importeren</string>
<string name="export_notification_title">Export succesvol!</string>
<string name="export_notification_content">Klik hier om de export per email te versturen</string>
<string name="export_notification_subjet">Nieuwe afspeellijst</string>
<string name="export_notification_body">Open het bijgevoegde bestand met TubeLab</string>
<string name="playlists">Afspeellijsten</string> <string name="playlists">Afspeellijsten</string>
<string name="no_playlist">Geen afspeellijst</string>
<string name="display_name">Weergave naam</string> <string name="display_name">Weergave naam</string>
<string name="action_playlist_add">Je hebt geen afspeellijsten. Tik op het \"+\"-pictogram om een nieuwe afspeellijst toe te voegen</string> <string name="action_playlist_add">Je hebt geen afspeellijsten. Tik op het \"+\"-pictogram om een nieuwe afspeellijst toe te voegen</string>
<string name="error_display_name">U moet een displaynaam opgeven!</string> <string name="error_display_name">U moet een displaynaam opgeven!</string>
@ -158,18 +253,25 @@
U kunt nu verbinding maken met uw account door <b>%1$s</b> in het eerste veld te schrijven en op <b>Verbinden</b>te klikken.\n\n U kunt nu verbinding maken met uw account door <b>%1$s</b> in het eerste veld te schrijven en op <b>Verbinden</b>te klikken.\n\n
<b>Belangrijke</b>: Als je instantie validatie vereist, je ontvangt een e-mail zodra deze is gevalideerd! <b>Belangrijke</b>: Als je instantie validatie vereist, je ontvangt een e-mail zodra deze is gevalideerd!
</string> </string>
<string name="account">Rekening</string> <string name="account">Account</string>
<string name="report_account">Rapportageformulier</string> <string name="report_account">Account rapporteren</string>
<string-array name="settings_video_mode"> <string-array name="settings_video_mode">
<item>Webview</item> <item>Webview</item>
<item>Directe stroom</item> <item>Directe stroom</item>
<item>Magneetlink</item>
<item>Torrent</item>
</string-array>
<string-array name="settings_theme">
<item>Licht</item>
<item>Donker</item>
<item>Automatisch</item>
</string-array> </string-array>
<string-array name="settings_video_quality"> <string-array name="settings_video_quality">
<item>High</item> <item>Hoog</item>
<item>Medium</item> <item>Gemiddeld</item>
<item>Low</item> <item>Laag</item>
</string-array> </string-array>
<string name="unfollow_confirm">Wilt u dit account ontvouwen?</string> <string name="unfollow_confirm">Wilt u dit account ontvolgen?</string>
<string name="title_video_peertube">Titel voor de video</string> <string name="title_video_peertube">Titel voor de video</string>
<string name="join_peertube">Word lid van Peertube</string> <string name="join_peertube">Word lid van Peertube</string>
<string name="agreement_check_peertube">Ik ben minstens 16 jaar oud en ga akkoord met de %1$s van dit geval</string> <string name="agreement_check_peertube">Ik ben minstens 16 jaar oud en ga akkoord met de %1$s van dit geval</string>
@ -181,18 +283,19 @@
<string name="bookmark_peertube_empty">Er zijn geen video\'s in uw favorieten!</string> <string name="bookmark_peertube_empty">Er zijn geen video\'s in uw favorieten!</string>
<string name="delete_channel">Verwijder kanaal</string> <string name="delete_channel">Verwijder kanaal</string>
<string name="action_channel_confirm_delete">Weet u zeker dat u dit kanaal permanent zult verwijderen?</string> <string name="action_channel_confirm_delete">Weet u zeker dat u dit kanaal permanent zult verwijderen?</string>
<string name="no_muted">Geen gedempte rekeningen!</string> <string name="modify_playlists">Video in afspeellijsten</string>
<string name="no_muted">Geen gedempte accounts!</string>
<string name="error_display_name_channel">U moet een naam en een weergavenaam voor dit kanaal definiëren!</string> <string name="error_display_name_channel">U moet een naam en een weergavenaam voor dit kanaal definiëren!</string>
<string name="action_channel_create">Creëer een kanaal</string> <string name="action_channel_create">Creëer een kanaal</string>
<string name="action_channel_edit">Edit kanaal</string> <string name="action_channel_edit">Edit kanaal</string>
<string name="email_error_domain">E-mailadressen in %1$s zijn niet toegestaan!</string> <string name="email_error_domain">E-mailadressen in %1$s zijn niet toegestaan!</string>
<string name="report_comment_size">Geef de redenen op</string> <string name="report_comment_size">Geef de redenen op</string>
<string name="not_logged_in">U moet worden geauthenticeerd om tot deze actie over te gaan!</string> <string name="not_logged_in">U moet worden geauthenticeerd om tot deze actie over te gaan!</string>
<string name="successful_report">De rekening is gemeld!</string> <string name="successful_report">Het account is gerapporteerd!</string>
<string name="successful_report_comment">The comment has been reported!</string> <string name="successful_report_comment">Het commentaar is gemeld!</string>
<string name="successful_video_report">De video is gemeld!</string> <string name="successful_video_report">De video is gemeld!</string>
<string name="password_length_error">Het wachtwoord moet minimaal 6 karakters bevatten!</string> <string name="password_length_error">Het wachtwoord moet minimaal 6 karakters bevatten!</string>
<string name="muted_done">De rekening is gedempt!</string> <string name="muted_done">Het account is gedempt!</string>
<string name="edit_video">Bewerk video</string> <string name="edit_video">Bewerk video</string>
<string name="create_an_account">Creëer een account</string> <string name="create_an_account">Creëer een account</string>
<string name="followers_count">%1$s Abonnees</string> <string name="followers_count">%1$s Abonnees</string>
@ -212,8 +315,9 @@
<string name="pickup_categories">Kies categorieën</string> <string name="pickup_categories">Kies categorieën</string>
<string name="pickup_languages">Kies talen</string> <string name="pickup_languages">Kies talen</string>
<string name="notification_channel_name">Informatie actualiseren</string> <string name="notification_channel_name">Informatie actualiseren</string>
<string name="fetch_notification_channel_name">Notificaties ophalen</string>
<string name="add_account">Een account toevoegen</string> <string name="add_account">Een account toevoegen</string>
<string name="list_of_accounts">Lijst van rekeningen</string> <string name="list_of_accounts">Lijst van accounts</string>
<string name="pause">Pauze</string> <string name="pause">Pauze</string>
<string name="play">Speel</string> <string name="play">Speel</string>
<string name="minimize">Minimaliseer</string> <string name="minimize">Minimaliseer</string>

View File

@ -1,198 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="title_home">Home</string>
<string name="title_discover">Discover</string>
<string name="title_notifications">Notifications</string>
<string name="title_recently_added">Recently added</string>
<string name="title_trending">Trending</string>
<string name="title_most_liked">Most liked</string>
<string name="toast_error">Oops! An error occurred!</string>
<string name="title_muted">Muted</string>
<string name="title_channel">Channels</string>
<string name="do_not_list">Do not list</string>
<string name="blur">Blur</string>
<string name="display">Display</string>
<string name="no_opinion">No opinion</string>
<string name="instance_choice">Pickup an instance</string>
<string name="not_valide_instance">This instance does not seem to be valid!</string>
<string name="no_videos">No videos!</string>
<string name="favicon">Favicon</string>
<string name="open_with">Open with</string>
<string name="action_playlist_edit">Edit a playlist</string>
<string name="close">Close</string>
<string name="upload_video">Upload</string>
<string name="image_preview">Image preview</string>
<string name="file_to_upload">Select the file to upload</string>
<string name="channel">Channel</string>
<string name="videos">Videos</string>
<string name="channels">Channels</string>
<string name="yes">Yes</string>
<string name="no">No</string>
<string name="cancel">Cancel</string>
<string name="download">Download</string>
<string name="profile_picture">Profile picture</string>
<string name="update_video">Update video</string>
<string name="date_seconds">%d s</string>
<string name="date_minutes">%d m</string>
<string name="date_hours">%d h</string>
<string name="date_day">%d d</string>
<string name="number_view_video">%s views</string>
<string name="title_instance_login">Instance host</string>
<string name="uploading">Uploading, please wait…</string>
<string name="upload_video_success">The video has been uploaded!</string>
<string name="toast_cancelled">Upload cancelled!</string>
<string name="video_uploaded_action">Tap here to edit the video data.</string>
<string name="toot_select_image_error">An error occurred while selecting the media!</string>
<string name="download_file">Download %1$s</string>
<string name="action_privacy">Privacy</string>
<string name="action_logout">Logout</string>
<string name="login">Login</string>
<string name="password">Password</string>
<string name="email">Email</string>
<string name="tags">Tags</string>
<string name="validate">Validate</string>
<string name="share_with">Share with</string>
<string name="shared_via">Shared via TubeLab</string>
<string name="username">User name</string>
<string name="settings">Settings</string>
<string name="logout_account_confirmation">Are you sure you want to logout @%1$s@%2$s?</string>
<string name="following">Following</string>
<string name="followers">Followers</string>
<string name="client_error">Unable to get client id!</string>
<string name="toast_error_loading_account">An error occurred while switching between accounts!</string>
<string name="toast_error_search">An error occurred while searching!</string>
<string name="nothing_to_do">No action can be taken</string>
<string name="action_follow">Follow</string>
<string name="action_mute">Mute</string>
<string name="search">Search</string>
<string name="delete">Delete</string>
<string name="action_lists_confirm_delete">Are you sure you want to permanently delete this list?</string>
<string name="action_lists_delete">Delete list</string>
<string name="no_comments">Be the first to leave a comment on this video with the top right button!</string>
<string name="comment_no_allowed_peertube">Comments are not enabled on this video!</string>
<string name="pickup_resolution">Pick up a resolution</string>
<string name="bookmark_add_peertube">The video has been added to bookmarks!</string>
<string name="bookmark_remove_peertube">The video has been removed from bookmarks!</string>
<string name="information" tools:ignore="UnusedResources">Information</string>
<string name="app_logo">Logo of the application</string>
<!-- languages not translated -->
<string name="subscriptions">Subscriptions</string>
<string name="delete_comment">Delete a comment</string>
<string name="delete_comment_confirm">Are you sure to delete this comment?</string>
<string name="set_video_mode">Mode for videos</string>
<string name="my_videos">My videos</string>
<string name="title">Title</string>
<string name="license">License</string>
<string name="category">Category</string>
<string name="language">Language</string>
<string name="peertube_nsfw">This video contains mature or explicit content</string>
<string name="peertube_enable_comments">Enable video comments</string>
<string name="description">Description</string>
<string name="toast_peertube_video_updated">The video has been updated!</string>
<string name="register_account">Register an account</string>
<string name="email_address">Email address</string>
<string name="preview">Preview</string>
<string name="change_preview">Change preview</string>
<string name="name">Name</string>
<string name="display_more">Display more</string>
<string name="no_channels">No channels!</string>
<string name="report_helper">Some explanations about your report…</string>
<string name="report_video">Report video</string>
<string name="report">Report</string>
<string name="change_instance">Pickup another instance</string>
<string name="my_history">History</string>
<string name="edit">Edit</string>
<string name="set_video_mode_description">Allows to change mode for playing videos (default, streaming or via a browser).</string>
<string name="delete_video">Delete video</string>
<string name="delete_video_confirmation">Are you sure to delete this video?</string>
<string name="no_video_to_display">No videos to display!</string>
<string name="share">Share</string>
<string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> commented your video <b>%2$s</b>]]></string>
<string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> is following your channel <b>%2$s</b>]]></string>
<string name="peertube_follow_account"><![CDATA[<b>%1$s</b> is following your account]]></string>
<string name="peertube_video_published"><![CDATA[Your video <b>%1$s</b> has been published]]></string>
<string name="peertube_video_import_success"><![CDATA[Your video import <b>%1$s</b> succeeded]]></string>
<string name="peertube_video_import_error"><![CDATA[Your video import <b>%1$s</b> failed]]></string>
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> published a new video: <b>%2$s</b>]]></string>
<string name="peertube_video_blacklist"><![CDATA[Your video <b>%1$s</b> has been blacklisted]]></string>
<string name="peertube_video_unblacklist"><![CDATA[Your video <b>%1$s</b> has been unblacklisted]]></string>
<string name="add_public_comment">Add a public comment</string>
<string name="send_comment">Send comment</string>
<string name="all">All</string>
<!-- end languages -->
<string name="playlists">Playlists</string>
<string name="display_name">Display name</string>
<string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string>
<string name="error_display_name">You must provide a display name!</string>
<string name="error_channel_mandatory">The channel is required when the playlist is public.</string>
<string name="action_playlist_create">Create a playlist</string>
<string name="action_playlist_empty_content">There is nothing in this playlist yet.</string>
<string name="password_confirm">Confirm password</string>
<string name="agreement_check">I agree to %1$s and %2$s</string>
<string name="server_rules">server rules</string>
<string name="tos">terms of service</string>
<string name="sign_up">Sign up</string>
<string name="all_field_filled">Please, fill all the fields!</string>
<string name="password_error">Passwords don\'t match!</string>
<string name="email_error">The email doesn\'t seem to be valid!</string>
<string name="email_indicator">You will be sent a confirmation e-mail</string>
<string name="password_indicator">Use at least 8 characters</string>
<string name="password_too_short">Password should contain at least 8 characters</string>
<string name="username_error">Username should only contain letters, numbers and underscores</string>
<string name="account_created">Account created!</string>
<string name="account_created_message"> Your account has been created!\n\n
Think to validate your email within the 48 next hours.\n\n
You can now connect your account by writing <b>%1$s</b> in the first field and tap on <b>Connect</b>.\n\n
<b>Important</b>: If your instance required validation, you will receive an email once it is validated!
</string>
<string name="account">Account</string>
<string name="report_account">Report account</string>
<string-array name="settings_video_mode">
<item>Webview</item>
<item>Direct stream</item>
</string-array>
<string name="unfollow_confirm">Do you want to unfollow this account?</string>
<string name="title_video_peertube">Title for the video</string>
<string name="join_peertube">Join Peertube</string>
<string name="agreement_check_peertube">I am at least 16 years old and agree to the %1$s of this instance</string>
<string name="edit_profile">Edit profile</string>
<string name="make_an_action">Make an action</string>
<string name="action_unfollow">Unfollow</string>
<string name="display_nsfw_videos">Display sensitive videos</string>
<string name="fullscreen">Fullscreen</string>
<string name="bookmark_peertube_empty">There are no videos in your favourites!</string>
<string name="delete_channel">Remove channel</string>
<string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string>
<string name="no_muted">No muted accounts!</string>
<string name="error_display_name_channel">You must define a name and a display name for this channel!</string>
<string name="action_channel_create">Create a channel</string>
<string name="action_channel_edit">Edit channel</string>
<string name="email_error_domain">Email addresses in %1$s are not allowed!</string>
<string name="report_comment_size">Please, specify the reasons</string>
<string name="not_logged_in">You must be authenticated to proceed to this action!</string>
<string name="successful_report">The account has been reported!</string>
<string name="successful_video_report">The video has been reported!</string>
<string name="password_length_error">The password must contain at least 6 characters!</string>
<string name="muted_done">The account has been muted!</string>
<string name="edit_video">Edit video</string>
<string name="create_an_account">Create an account</string>
<string name="followers_count">%1$s Subscribers</string>
<string name="developer">Developer</string>
<string name="about_vesrion">Release %1$s</string>
<string name="about_the_app">About the app</string>
<string name="Donate">Donate</string>
<string name="source_code">Source code</string>
<string name="issue_tracker">Issue tracker</string>
<string name="action_instance_empty_content">No instances match these criteria</string>
<string name="instances_picker">Instances picker</string>
<string name="pickup_instance">Pickup this instance</string>
<string name="sensitive_video"> Sensitive videos</string>
<string name="sensitive_content">Sensitive content: %1$s</string>
<string name="followers_instance">%1$s followers instances</string>
<string name="help">Help</string>
<string name="pickup_categories">Pickup categories</string>
<string name="pickup_languages">Pickup languages</string>
<string name="notification_channel_name">Update information</string>
<string name="add_account">Add an account</string>
<string name="list_of_accounts">List of accounts</string>
</resources>

View File

@ -1,73 +1,129 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"> <resources xmlns:tools="http://schemas.android.com/tools">
<string name="title_home">Strona główna</string> <string name="set_video_in_list">Filmy na liście</string>
<string name="title_local">Local</string> <string name="set_video_in_list_description">Zmień układ wyświetlania filmów na liście</string>
<string name="title_discover">Odkryj</string> <string name="no_instances">Brak instancji!</string>
<string name="show_more">Pokaż więcej</string>
<string name="show_less">Pokaż mniej</string>
<string name="set_play_screen_lock">Blokada ekranu</string>
<string name="set_play_screen_lock_description">Odtwarzaj filmy kiedy ekran jest zablokowany</string>
<string name="save">Zapisz</string>
<string name="enable_history">Włącz historię</string>
<string name="change_profile_picture">Zmień zdjęcie profilowe</string>
<string name="set_autoplay">Automatyczne odtwarzanie</string>
<string name="set_autoplay_description">Jeśli włączone, filmy będą odtwarzane automatycznie</string>
<string name="set_fullscreen">Pełny ekran</string>
<string name="set_fullscreen_description">Automatycznie otwieraj filmy w trybie pełnoekranowym</string>
<string name="set_autoplay_next_video">Automatycznie rozpocznij odtwarzanie następnego filmu</string>
<string name="set_autoplay_next_video_description">Kiedy film się skończy, odtwórz następny sugerowany film.</string>
<string name="add_public_reply">Dodaj publiczną odpowiedź</string>
<string name="activity">Aktywność</string>
<string name="app">Aplikacja</string>
<string name="notif_new_video">Nowy film z twoich subskrypcji</string>
<string name="notif_new_comment">Nowy komentarz do Twojego filmu</string>
<string name="notif_blocked">Jeden z Twoich filmów jest zablokowany/odblokowany</string>
<string name="notif_video_published">Wideo opublikowane (po transkodowaniu/zaplanowanej aktualizacji)</string>
<string name="notif_video_imported">Import wideo zakończony</string>
<string name="notif_new_followers">Ty lub Twój kanał ma nowego obserwującego</string>
<string name="notif_video_mention">Ktoś wspomniał o tobie w komentarzach</string>
<string name="notif_abuse_received">Raport o nadużyciach otrzymał nową wiadomość</string>
<string name="notif_abuse_accepted">Jeden z Twoich raportów o nadużyciach został zaakceptowany lub odrzucony przez moderatorów</string>
<plurals name="number_of_replies">
<item quantity="one">%d odpowiedź</item>
<item quantity="few">%d odpowiedzi</item>
<item quantity="many">%d odpowiedzi</item>
<item quantity="other">%d odpowiedzi</item>
</plurals>
<string name="reply">Odpowiedz</string>
<string name="set_theme">Motyw</string>
<string name="set_theme_description">Zezwól na zmianę motywu aplikacji</string>
<string name="federation_issue">Film nie może być zfederowany!</string>
<string name="title_home">Początek</string>
<string name="title_local">Lokalne</string>
<string name="title_discover">Odkrywaj</string>
<string name="title_notifications">Powiadomienia</string> <string name="title_notifications">Powiadomienia</string>
<string name="title_recently_added">Ostatnio dodany</string> <string name="title_recently_added">Ostatnio dodane</string>
<string name="title_trending">Trendowość</string> <string name="title_trending">Popularne</string>
<string name="title_most_liked">Najbardziej lubiany</string> <string name="title_most_liked">Najbardziej lubiane</string>
<string name="toast_error">Oops! Wystąpił błąd!</string> <string name="toast_error">Ups! Wystąpił błąd!</string>
<string name="title_muted">Wyciszony</string> <string name="title_muted">Wyciszone</string>
<string name="title_channel">Kanały</string> <string name="title_channel">Kanały</string>
<string name="do_not_list">Nie wymieniaj</string> <string name="do_not_list">Nie wymieniaj</string>
<string name="blur">Rozmycie</string> <string name="blur">Rozmycie</string>
<string name="display">Wyświetlacz</string> <string name="display">Wyświetl</string>
<string name="no_opinion">Brak opinii</string> <string name="no_opinion">Brak opinii</string>
<string name="instance_choice">Wybierz instancję</string> <string name="instance_choice">Wybierz instancję</string>
<string name="not_valide_instance">Ten przypadek wydaje się być nieważny!</string> <string name="not_valide_instance">Ta instancja nie wygląda na prawidłową!</string>
<string name="no_videos">Nie ma wideo!</string> <string name="no_videos">Brak filmów!</string>
<string name="no_notifications">No notifications!</string> <string name="no_notifications">Brak powiadomień!</string>
<string name="favicon">Favicon</string> <string name="favicon">Favicon</string>
<string name="open_with">Otwarte z</string> <string name="open_with">Otwórz przez</string>
<string name="action_playlist_edit">Edycja playlisty</string> <string name="action_playlist_edit">Edytuj listę odtwarzania</string>
<string name="close">Zamknij</string> <string name="close">Zamknij</string>
<string name="upload_video">Wczytaj</string> <string name="upload_video">Prześlij</string>
<string name="image_preview">Podgląd obrazu</string> <string name="image_preview">Podgląd obrazu</string>
<string name="file_to_upload">Wybierz plik do przesłania</string> <string name="file_to_upload">Wybierz plik do przesłania</string>
<string name="new_video">Nowy film</string>
<string name="new_blacklist">Nowe informacje o czarnej liście</string>
<string name="new_my_video_published">Twój film został opublikowany</string>
<string name="new_my_video_error">Błąd podczas publikowania filmu</string>
<string name="new_comment">Nowy komentarz</string>
<string name="new_follow">Nowy obserwujący</string>
<string name="channel">Kanał</string> <string name="channel">Kanał</string>
<string name="videos">Filmy wideo</string> <string name="videos">Filmy</string>
<string name="channels">Kanały</string> <string name="channels">Kanały</string>
<string name="refresh_every">Sprawdzaj co:</string>
<string-array name="refresh_time">
<item>Nigdy</item>
<item>15 minut</item>
<item>30 minut</item>
<item>1 godzina</item>
<item>2 godziny</item>
<item>6 godzin</item>
<item>12 godzin</item>
</string-array>
<string name="yes">Tak</string> <string name="yes">Tak</string>
<string name="no">Nie</string> <string name="no">Nie</string>
<string name="cancel">Anuluj</string> <string name="cancel">Anuluj</string>
<string name="download">Pobierz</string> <string name="download">Pobierz</string>
<string name="profile_picture">Zdjęcie profilowe</string> <string name="profile_picture">Zdjęcie profilowe</string>
<string name="update_video">Aktualizacja wideo</string> <string name="update_video">Aktualizuj film</string>
<string name="remove_from_playlist">Usuń z listy odtwarzania</string>
<string name="date_seconds">%d s</string> <string name="date_seconds">%d s</string>
<string name="date_minutes">%d m</string> <string name="date_minutes">%d min</string>
<string name="date_hours">%d h</string> <string name="date_hours">%d h</string>
<string name="date_day">%d d</string> <string name="date_day">%d dni</string>
<string name="number_view_video">%s widoki</string> <string name="number_view_video">%s wyświetleń</string>
<string name="title_instance_login">Host instancji</string> <string name="title_instance_login">Host instancji</string>
<string name="uploading">Przesyłanie, proszę czekać…</string> <string name="uploading">Przesyłanie, proszę czekać…</string>
<string name="upload_video_success">Wideo zostało załadowane!</string> <string name="upload_video_success">Film został przesłany!</string>
<string name="toast_cancelled">Przesyłanie anulowane!</string> <string name="toast_cancelled">Przesyłanie anulowane!</string>
<string name="video_uploaded_action">Stuknij tutaj, aby edytować dane wideo.</string> <string name="video_uploaded_action">Dotknij tutaj, aby edytować dane filmu.</string>
<string name="toot_select_image_error">Podczas wyboru nośnika wystąpił błąd!</string> <string name="toot_select_image_error">Podczas wyboru nośnika wystąpił błąd!</string>
<string name="download_file">Pobierz %1$s</string> <string name="download_file">Pobierz %1$s</string>
<string name="account_updated">Konto zostało zaktualizowane!</string>
<string name="action_privacy">Prywatność</string> <string name="action_privacy">Prywatność</string>
<string name="action_logout">Logout</string> <string name="action_logout">Wyloguj</string>
<string name="login">Login</string> <string name="login">Zaloguj</string>
<string name="password">Hasło</string> <string name="password">Hasło</string>
<string name="email">Email</string> <string name="email">E-mail</string>
<string name="tags">Tagi</string> <string name="tags">Znaczniki</string>
<string name="validate">Walidacja</string> <string name="validate">Potwierdź</string>
<string name="share_with">Dzielić się z</string> <string name="share_with">Udostępnij dla</string>
<string name="shared_via">Współdzielone przez TubeLab</string> <string name="shared_via">Udostępnione przez TubeLab</string>
<string name="username">Nazwa użytkownika</string> <string name="username">Nazwa użytkownika</string>
<string name="settings">Ustawienia</string> <string name="settings">Ustawienia</string>
<string name="logout_account_confirmation">Czy na pewno chcesz się wylogować @%1$s@%2$s?</string> <string name="logout_account_confirmation">Czy na pewno chcesz wylogować @%1$s@%2$s?</string>
<string name="following">Obserwowane</string> <string name="following">Obserwowane</string>
<string name="followers">Naśladowcy</string> <string name="followers">Obserwujący</string>
<string name="client_error">Nie można dostać identyfikatora klienta!</string> <string name="client_error">Błąd pobierania ID klienta!</string>
<string name="toast_error_loading_account">Podczas przełączania między kontami wystąpił błąd!</string> <string name="toast_error_loading_account">Wystąpił błąd podczas przełączania konta!</string>
<string name="toast_error_search">Podczas wyszukiwania wystąpił błąd!</string> <string name="toast_error_search">Podczas wyszukiwania wystąpił błąd!</string>
<string name="nothing_to_do">Nie można podjąć żadnych działań</string> <string name="nothing_to_do">Nie można podjąć żadnych działań</string>
<string name="action_follow">Śledź</string> <string name="action_follow">Obserwuj</string>
<string name="action_mute">Niemy</string> <string name="action_mute">Wycisz</string>
<string name="search">Szukaj</string> <string name="search">Szukaj</string>
<string name="delete">Skreślić</string> <string name="delete">Usuń</string>
<string name="action_lists_confirm_delete">Czy na pewno chcesz na stałe usunąć tę listę?</string> <string name="action_lists_confirm_delete">Czy na pewno chcesz na stałe usunąć tę listę?</string>
<string name="action_lists_delete">Usuń listę</string> <string name="action_lists_delete">Usuń listę</string>
<string name="no_comments">Bądź pierwszym, który zostawi komentarz do tego filmu za pomocą prawego górnego przycisku!</string> <string name="no_comments">Bądź pierwszym, który zostawi komentarz do tego filmu za pomocą prawego górnego przycisku!</string>
@ -79,62 +135,103 @@
<string name="app_logo">Logo aplikacji</string> <string name="app_logo">Logo aplikacji</string>
<!-- languages not translated --> <!-- languages not translated -->
<string name="subscriptions">Abonamenty</string> <string name="subscriptions">Abonamenty</string>
<string name="delete_instance">Usuń instancję</string>
<string name="delete_instance_confirm">Czy na pewno chcesz usunąć tę instancję?</string>
<string name="delete_comment">Usuń komentarz</string> <string name="delete_comment">Usuń komentarz</string>
<string name="delete_comment_confirm">Czy na pewno usuniesz ten komentarz?</string> <string name="delete_comment_confirm">Czy na pewno usuniesz ten komentarz?</string>
<string name="set_video_mode">Tryb dla filmów wideo</string> <string name="set_video_mode">Tryb dla filmów wideo</string>
<string name="filter">Filtruj</string>
<string name="sepia_search">Wyszukiwanie Sepia</string>
<string name="sepia_element_nsfw">Wyświetlaj wrażliwe treści</string>
<string name="sepia_element_published_date">Data publikacji</string>
<string name="any">Każde</string>
<string name="today">Dzisiaj</string>
<string name="last_7_days">Ostatnie 7 dni</string>
<string name="last_30_days">Ostatnie 30 dni</string>
<string name="last_365_days">Ostatnie 365 dni</string>
<string name="sepia_element_duration">Czas trwania</string>
<string name="duration_short"><![CDATA[Krótkie (<4 min)]]></string>
<string name="duration_medium"><![CDATA[Średnia (410 min)]]></string>
<string name="duration_long"><![CDATA[Długie (> 10 min)]]></string>
<string name="display_all_categories">Wyświetl wszystkie kategorie</string>
<string name="display_all_licenses">Wyświetl wszystkie licencje</string>
<string name="display_all_languages">Wyświetl wszystkie języki</string>
<string name="all_of_these_tags">Wszystkie z tych znaczników</string>
<string name="one_of_these_tags">Jeden z tych znaczników</string>
<string name="apply_filter">Zastosuj filtr</string>
<string-array name="sort_by_array">
<item>Najlepsze dopasowanie</item>
<item>Najnowsze</item>
<item>Najstarsze</item>
</string-array>
<string name="sort_by">Sortuj według</string>
<string name="sepia_search_hint">Słowo kluczowe, kanał, film itp.</string>
<string name="sepia_indication">Sepia Search wyświetla filmy i kanały pasujące do Twojego wyszukiwania, ale nie jest wydawcą ani właścicielem. Jeśli zauważysz jakiekolwiek problemy z filmem, zgłoś je administratorom na stronie PeerTube, na której film jest publikowany.</string>
<string name="my_videos">Moje filmy</string> <string name="my_videos">Moje filmy</string>
<string name="title">Tytuł</string> <string name="title">Tytuł</string>
<string name="license">Licencja</string> <string name="license">Licencja</string>
<string name="category">Kategoria</string> <string name="category">Kategoria</string>
<string name="language">Język</string> <string name="language">Język</string>
<string name="peertube_nsfw">Ten film zawiera dojrzałą lub wyraźną treść</string> <string name="peertube_nsfw">Ten film zawiera treść dla dorosłych lub zawierającą przemoc</string>
<string name="peertube_enable_comments">Włączanie komentarzy wideo</string> <string name="peertube_enable_comments">Zezwól na komentarze</string>
<string name="description">Opis</string> <string name="description">Opis</string>
<string name="toast_peertube_video_updated">Film został zaktualizowany!</string> <string name="toast_peertube_video_updated">Film został zaktualizowany!</string>
<string name="register_account">Zarejestruj konto</string> <string name="register_account">Załóż konto</string>
<string name="email_address">Adres e-mail</string> <string name="email_address">Adres e-mail</string>
<string name="preview">Premiera</string> <string name="preview">Podgląd</string>
<string name="change_preview">Zmiana podglądu</string> <string name="change_preview">Zmi podgląd</string>
<string name="name">Nazwa</string> <string name="name">Nazwa</string>
<string name="display_more">Wyświetlaj więcej</string> <string name="display_more">Pokaż więcej</string>
<string name="no_channels">Żadnych kanałów!</string> <string name="no_channels">Brak kanałów!</string>
<string name="report_helper">Kilka wyjaśnień na temat twojego raportu…</string> <string name="report_helper">Kilka wyjaśnień na temat twojego raportu…</string>
<string name="report_video">Wideo sprawozdawcze</string> <string name="report_video">Zgłoś film</string>
<string name="report">Raport</string> <string name="report">Zgłoś</string>
<string name="change_instance">Wybierz inny przypadek</string> <string name="change_instance">Wybierz inną instancję</string>
<string name="my_history">Historia</string> <string name="my_history">Historia</string>
<string name="edit">Edycja</string> <string name="edit">Edytuj</string>
<string name="video_settings">Video settings</string> <string name="video_settings">Ustawienia filmu</string>
<string name="app_interface">Interface</string> <string name="app_interface">Interfejs</string>
<string name="set_cache_mode">Cache</string> <string name="set_cache_mode">Pamięć podręczna</string>
<string name="set_video_cache_description">Définir le cache pour les vidéos (défaut 100Mo)</string> <string name="set_video_cache_description">Ustaw pamięć podręczną dla filmów (domyślnie 100Mb)</string>
<string name="set_video_quality_description">Define a default quality for videos</string> <string name="set_video_quality_description">Ustaw domyślną jakość filmów</string>
<string name="set_quality_mode">Resolution for videos</string> <string name="set_quality_mode">Rozdzielczość filmów</string>
<string name="video_cache_value">Video cache: %d Mb</string> <string name="video_cache_value">Pamięć podręczna: %d Mb</string>
<string name="captions">Podpisy</string> <string name="captions">Napisy</string>
<string name="pickup_captions">Wybierz podpisy</string> <string name="pickup_captions">Wybierz napisy</string>
<string name="none">Brak</string> <string name="none">Brak</string>
<string name="set_video_mode_description">Umożliwia zmianę trybu odtwarzania filmów (domyślnie, strumieniowo lub za pomocą przeglądarki).</string> <string name="set_video_mode_description">Umożliwia zmianę trybu odtwarzania filmów (domyślnie, strumieniowo lub za pomocą przeglądarki).</string>
<string name="delete_video">Usuń video</string> <string name="delete_account_comment">Usuń komentarze użytkownika</string>
<string name="delete_video_confirmation">Czy na pewno usuniesz ten film?</string> <string name="delete_account_comment_confirm">Czy na pewno chcesz usunąć wszystkie komentarze tego użytkownika?</string>
<string name="delete_video">Usuń film</string>
<string name="delete_video_confirmation">Czy na pewno chcesz usunąć ten film?</string>
<string name="no_video_to_display">Brak filmów do wyświetlenia!</string> <string name="no_video_to_display">Brak filmów do wyświetlenia!</string>
<string name="share">Podziel się</string> <string name="share">Udostępnij</string>
<string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> skomentował twój film <b>%2$s</b>]]></string> <string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> dodaje komentarz do Twojego filmu <b>%2$s</b>]]></string>
<string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> podąża za twoim kanałem <b>%2$s</b>]]></string> <string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> obserwuje Twój kanał <b>%2$s</b>]]></string>
<string name="peertube_follow_account"><![CDATA[<b>%1$s</b> śledzi twoje konto]]></string> <string name="peertube_follow_account"><![CDATA[<b>%1$s</b> obserwuje Twoje konto]]></string>
<string name="peertube_video_published"><![CDATA[Twój film <b>%1$s</b> został opublikowany]]></string> <string name="peertube_video_published"><![CDATA[Twój film <b>%1$s</b> został opublikowany]]></string>
<string name="peertube_video_import_success"><![CDATA[Twój import wideo <b>%1$s</b> udał się]]></string> <string name="peertube_video_import_success"><![CDATA[Twój import wideo <b>%1$s</b> udał się]]></string>
<string name="peertube_video_import_error"><![CDATA[Twój import wideo <b>%1$s</b> nie powiódł się]]></string> <string name="peertube_video_import_error"><![CDATA[Twój import wideo <b>%1$s</b> nie powiódł się]]></string>
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> opublikował nowe wideo: <b>%2$s</b>]]></string> <string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> publikuje nowy film: <b>%2$s</b>]]></string>
<string name="peertube_video_blacklist"><![CDATA[Twój film <b>%1$s</b> został umieszczony na czarnej liście]]></string> <string name="peertube_video_blacklist"><![CDATA[Twój film <b>%1$s</b> został umieszczony na czarnej liście]]></string>
<string name="peertube_video_unblacklist"><![CDATA[Twój film <b>%1$s</b> został usunięty z czarnej listy]]></string> <string name="peertube_video_unblacklist"><![CDATA[Twój film <b>%1$s</b> został usunięty z czarnej listy]]></string>
<string name="peertube_video_abuse"><![CDATA[New abuse report for video: <b>%1$s</b>]]></string> <string name="peertube_video_report_success"><![CDATA[Twój raport o nadużyciach <b>%1$s</b> został zaakceptowany]]></string>
<string name="add_public_comment">Dodaj komentarz publiczny</string> <string name="peertube_video_abuse"><![CDATA[Nowe zgłoszenie nadużycia dla filmu: <b>%1$s</b>]]></string>
<string name="send_comment">Wyślij komentarz</string> <string name="add_public_comment">Dodaj publiczny komentarz</string>
<string name="send_comment">Prześlij komentarz</string>
<string name="all">Wszystkie</string> <string name="all">Wszystkie</string>
<!-- end languages --> <!-- end languages -->
<string name="playlists">Playlisty</string> <string name="delete_history">Delete videos history</string>
<string name="display_name">Nazwa wyświetlacza</string> <string name="delete_history_confirm">Are you sure you want to delete all your videos history?</string>
<string name="export_list">Eksportuj</string>
<string name="import_list">Importuj</string>
<string name="export_notification_title">Eksport zakończony sukcesem!</string>
<string name="export_notification_content">Dotknij tutaj, aby wysłać eksport przez e-mail</string>
<string name="export_notification_subjet">Nowa playlista</string>
<string name="export_notification_body">Otwórz załączony plik przez TubeLab</string>
<string name="playlists">Listy odtwarzania</string>
<string name="no_playlist">Brak playlist</string>
<string name="display_name">Wyświetlana nazwa</string>
<string name="action_playlist_add">Nie masz żadnej playlisty. Stuknij ikonę \"+\", aby dodać nową listę odtwarzania</string> <string name="action_playlist_add">Nie masz żadnej playlisty. Stuknij ikonę \"+\", aby dodać nową listę odtwarzania</string>
<string name="error_display_name">Musisz podać nazwę wyświetlacza!</string> <string name="error_display_name">Musisz podać nazwę wyświetlacza!</string>
<string name="error_channel_mandatory">Kanał jest wymagany, gdy lista odtwarzania jest publiczna.</string> <string name="error_channel_mandatory">Kanał jest wymagany, gdy lista odtwarzania jest publiczna.</string>
@ -159,18 +256,25 @@
<b>Ważny</b>Jeśli Twoja instancja wymaga weryfikacji, otrzymasz e-mail, gdy zostanie potwierdzony! <b>Ważny</b>Jeśli Twoja instancja wymaga weryfikacji, otrzymasz e-mail, gdy zostanie potwierdzony!
</string> </string>
<string name="account">Konto</string> <string name="account">Konto</string>
<string name="report_account">Rachunek sprawozdawczy</string> <string name="report_account">Zgłoś konto</string>
<string-array name="settings_video_mode"> <string-array name="settings_video_mode">
<item>Normalny</item>
<item>Webview</item> <item>Webview</item>
<item>Strumień bezpośredni</item> <item>Magnes</item>
<item>Torrent</item>
</string-array>
<string-array name="settings_theme">
<item>Jasny</item>
<item>Ciemny</item>
<item>Automatyczny</item>
</string-array> </string-array>
<string-array name="settings_video_quality"> <string-array name="settings_video_quality">
<item>High</item> <item>Wysoka</item>
<item>Medium</item> <item>Średnia</item>
<item>Low</item> <item>Niska</item>
</string-array> </string-array>
<string name="unfollow_confirm">Chcesz rozwinąć to konto?</string> <string name="unfollow_confirm">Czy chcesz przestać obserwować to konto?</string>
<string name="title_video_peertube">Tytuł filmu wideo</string> <string name="title_video_peertube">Tytuł filmu</string>
<string name="join_peertube">Dołącz do Peertube</string> <string name="join_peertube">Dołącz do Peertube</string>
<string name="agreement_check_peertube">Mam co najmniej 16 lat i zgadzam się na %1$s w tym przypadku</string> <string name="agreement_check_peertube">Mam co najmniej 16 lat i zgadzam się na %1$s w tym przypadku</string>
<string name="edit_profile">Profil edycyjny</string> <string name="edit_profile">Profil edycyjny</string>
@ -181,6 +285,7 @@
<string name="bookmark_peertube_empty">Nie ma żadnych filmów w twoich ulubionych!</string> <string name="bookmark_peertube_empty">Nie ma żadnych filmów w twoich ulubionych!</string>
<string name="delete_channel">Usuń kanał</string> <string name="delete_channel">Usuń kanał</string>
<string name="action_channel_confirm_delete">Czy na pewno na stałe usuniesz ten kanał?</string> <string name="action_channel_confirm_delete">Czy na pewno na stałe usuniesz ten kanał?</string>
<string name="modify_playlists">Filmy w liście odtwarzania</string>
<string name="no_muted">Nie ma wyciszonych kont!</string> <string name="no_muted">Nie ma wyciszonych kont!</string>
<string name="error_display_name_channel">Musisz zdefiniować nazwę i nazwę wyświetlania dla tego kanału!</string> <string name="error_display_name_channel">Musisz zdefiniować nazwę i nazwę wyświetlania dla tego kanału!</string>
<string name="action_channel_create">Stwórz kanał</string> <string name="action_channel_create">Stwórz kanał</string>
@ -189,7 +294,7 @@
<string name="report_comment_size">Proszę podać przyczyny</string> <string name="report_comment_size">Proszę podać przyczyny</string>
<string name="not_logged_in">Musisz być uwierzytelniony, aby przystąpić do tej akcji!</string> <string name="not_logged_in">Musisz być uwierzytelniony, aby przystąpić do tej akcji!</string>
<string name="successful_report">Rachunek został zgłoszony!</string> <string name="successful_report">Rachunek został zgłoszony!</string>
<string name="successful_report_comment">The comment has been reported!</string> <string name="successful_report_comment">Komentarz został zgłoszony!</string>
<string name="successful_video_report">Film został zgłoszony!</string> <string name="successful_video_report">Film został zgłoszony!</string>
<string name="password_length_error">Hasło musi zawierać co najmniej 6 znaków!</string> <string name="password_length_error">Hasło musi zawierać co najmniej 6 znaków!</string>
<string name="muted_done">Rachunek został wyciszony!</string> <string name="muted_done">Rachunek został wyciszony!</string>
@ -212,6 +317,7 @@
<string name="pickup_categories">Kategorie wyboru</string> <string name="pickup_categories">Kategorie wyboru</string>
<string name="pickup_languages">Wybieranie języków</string> <string name="pickup_languages">Wybieranie języków</string>
<string name="notification_channel_name">Aktualizacja informacji</string> <string name="notification_channel_name">Aktualizacja informacji</string>
<string name="fetch_notification_channel_name">Sprawdź powiadomienia</string>
<string name="add_account">Dodaj konto</string> <string name="add_account">Dodaj konto</string>
<string name="list_of_accounts">Lista rachunków</string> <string name="list_of_accounts">Lista rachunków</string>
<string name="pause">Przerwa</string> <string name="pause">Przerwa</string>

View File

@ -1,15 +1,51 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"> <resources xmlns:tools="http://schemas.android.com/tools">
<string name="title_home">Home</string> <string name="set_video_in_list">Videos in list</string>
<string name="set_video_in_list_description">Change the layout for displaying videos in a list</string>
<string name="no_instances">No instances !</string>
<string name="show_more">Show more</string>
<string name="show_less">Show less</string>
<string name="set_play_screen_lock">Screen lock</string>
<string name="set_play_screen_lock_description">Keep playing videos when the screen is locked</string>
<string name="save">Save</string>
<string name="enable_history">Enable history</string>
<string name="change_profile_picture">Change profile picture</string>
<string name="set_autoplay">Automatic playback</string>
<string name="set_autoplay_description">If enabled, videos will be played automatically</string>
<string name="set_fullscreen">Fullscreen</string>
<string name="set_fullscreen_description">Automatically open videos in fullscreen</string>
<string name="set_autoplay_next_video">Automatically start playing the next video</string>
<string name="set_autoplay_next_video_description">When a video ends, follow up with the next suggested video.</string>
<string name="add_public_reply">Add a public reply</string>
<string name="activity">Activity</string>
<string name="app">App</string>
<string name="notif_new_video">New video from your subscriptions</string>
<string name="notif_new_comment">New comment on your video</string>
<string name="notif_blocked">One of your video is blocked/unblocked</string>
<string name="notif_video_published">Video published (after transcoding/scheduled update)</string>
<string name="notif_video_imported">Video import finished</string>
<string name="notif_new_followers">You or your channel(s) has a new follower</string>
<string name="notif_video_mention">Someone mentioned you in video comments</string>
<string name="notif_abuse_received">An abuse report received a new message</string>
<string name="notif_abuse_accepted">One of your abuse reports has been accepted or rejected by moderators</string>
<plurals name="number_of_replies">
<item quantity="one">%d resposta</item>
<item quantity="other">%d respostas</item>
</plurals>
<string name="reply">Responder</string>
<string name="set_theme">Tema</string>
<string name="set_theme_description">Allow to change app theme</string>
<string name="federation_issue">The video cannot be federated!</string>
<string name="title_home">Página inicial</string>
<string name="title_local">Local</string> <string name="title_local">Local</string>
<string name="title_discover">Discover</string> <string name="title_discover">Discover</string>
<string name="title_notifications">Notifications</string> <string name="title_notifications">Notificações</string>
<string name="title_recently_added">Recently added</string> <string name="title_recently_added">Recentemente adicionado</string>
<string name="title_trending">Trending</string> <string name="title_trending">Destaques</string>
<string name="title_most_liked">Most liked</string> <string name="title_most_liked">Most liked</string>
<string name="toast_error">Oops! An error occurred!</string> <string name="toast_error">Oops! An error occurred!</string>
<string name="title_muted">Muted</string> <string name="title_muted">Muted</string>
<string name="title_channel">Channels</string> <string name="title_channel">Canais</string>
<string name="do_not_list">Do not list</string> <string name="do_not_list">Do not list</string>
<string name="blur">Blur</string> <string name="blur">Blur</string>
<string name="display">Display</string> <string name="display">Display</string>
@ -19,95 +55,142 @@
<string name="no_videos">No videos!</string> <string name="no_videos">No videos!</string>
<string name="no_notifications">No notifications!</string> <string name="no_notifications">No notifications!</string>
<string name="favicon">Favicon</string> <string name="favicon">Favicon</string>
<string name="open_with">Open with</string> <string name="open_with">Abrir com</string>
<string name="action_playlist_edit">Edit a playlist</string> <string name="action_playlist_edit">Edit a playlist</string>
<string name="close">Close</string> <string name="close">Fechar</string>
<string name="upload_video">Upload</string> <string name="upload_video">Enviar</string>
<string name="image_preview">Image preview</string> <string name="image_preview">Image preview</string>
<string name="file_to_upload">Select the file to upload</string> <string name="file_to_upload">Selecione o ficheiro a enviar</string>
<string name="channel">Channel</string> <string name="new_video">New video</string>
<string name="videos">Videos</string> <string name="new_blacklist">New blacklist info</string>
<string name="channels">Channels</string> <string name="new_my_video_published">Your video is published</string>
<string name="yes">Yes</string> <string name="new_my_video_error">Error when publishing your video</string>
<string name="no">No</string> <string name="new_comment">New comment</string>
<string name="cancel">Cancel</string> <string name="new_follow">New follow</string>
<string name="download">Download</string> <string name="channel">Canal</string>
<string name="profile_picture">Profile picture</string> <string name="videos">Vídeos</string>
<string name="update_video">Update video</string> <string name="channels">Canais</string>
<string name="refresh_every">Fetch every:</string>
<string-array name="refresh_time">
<item>Never</item>
<item>15 minutes</item>
<item>30 minutes</item>
<item>1 hour</item>
<item>2 hours</item>
<item>6 hours</item>
<item>12 hours</item>
</string-array>
<string name="yes">Sim</string>
<string name="no">Não</string>
<string name="cancel">Cancelar</string>
<string name="download">Baixar</string>
<string name="profile_picture">Foto do perfil</string>
<string name="update_video">Atualizar vídeo</string>
<string name="remove_from_playlist">Remove from playlist</string>
<string name="date_seconds">%d s</string> <string name="date_seconds">%d s</string>
<string name="date_minutes">%d m</string> <string name="date_minutes">%d m</string>
<string name="date_hours">%d h</string> <string name="date_hours">%d h</string>
<string name="date_day">%d d</string> <string name="date_day">%d d</string>
<string name="number_view_video">%s views</string> <string name="number_view_video">%s visualizações</string>
<string name="title_instance_login">Instance host</string> <string name="title_instance_login">Instance host</string>
<string name="uploading">Uploading, please wait</string> <string name="uploading">Enviando, por favor aguarde</string>
<string name="upload_video_success">The video has been uploaded!</string> <string name="upload_video_success">O vídeo foi enviado!</string>
<string name="toast_cancelled">Upload cancelled!</string> <string name="toast_cancelled">Envio cancelado!</string>
<string name="video_uploaded_action">Tap here to edit the video data.</string> <string name="video_uploaded_action">Tap here to edit the video data.</string>
<string name="toot_select_image_error">An error occurred while selecting the media!</string> <string name="toot_select_image_error">Ocorreu um erro ao selecionar a mídia!</string>
<string name="download_file">Download %1$s</string> <string name="download_file">Baixar %1$s</string>
<string name="action_privacy">Privacy</string> <string name="account_updated">The account has been updated!</string>
<string name="action_logout">Logout</string> <string name="action_privacy">Privacidade</string>
<string name="login">Login</string> <string name="action_logout">Sair</string>
<string name="password">Password</string> <string name="login">Entrar</string>
<string name="email">Email</string> <string name="password">Senha</string>
<string name="email">E-mail</string>
<string name="tags">Tags</string> <string name="tags">Tags</string>
<string name="validate">Validate</string> <string name="validate">Ok</string>
<string name="share_with">Share with</string> <string name="share_with">Compartilhar com</string>
<string name="shared_via">Shared via TubeLab</string> <string name="shared_via">Shared via TubeLab</string>
<string name="username">User name</string> <string name="username">Nome de usuário</string>
<string name="settings">Settings</string> <string name="settings">Configurações</string>
<string name="logout_account_confirmation">Are you sure you want to logout @%1$s@%2$s?</string> <string name="logout_account_confirmation">Are you sure you want to logout @%1$s@%2$s?</string>
<string name="following">Following</string> <string name="following">Seguindo</string>
<string name="followers">Followers</string> <string name="followers">Seguidores</string>
<string name="client_error">Unable to get client id!</string> <string name="client_error">Não foi possível detectar id do cliente!</string>
<string name="toast_error_loading_account">An error occurred while switching between accounts!</string> <string name="toast_error_loading_account">Ocorreu um erro ao alternar entre as contas!</string>
<string name="toast_error_search">An error occurred while searching!</string> <string name="toast_error_search">Ocorreu um erro na pesquisa!</string>
<string name="nothing_to_do">No action can be taken</string> <string name="nothing_to_do">A ação não pode ser feita ou não é suportada</string>
<string name="action_follow">Follow</string> <string name="action_follow">Seguir</string>
<string name="action_mute">Mute</string> <string name="action_mute">Silenciar</string>
<string name="search">Search</string> <string name="search">Pesquisa</string>
<string name="delete">Delete</string> <string name="delete">Remover</string>
<string name="action_lists_confirm_delete">Are you sure you want to permanently delete this list?</string> <string name="action_lists_confirm_delete">Tem certeza de que deseja excluir permanentemente esta lista?</string>
<string name="action_lists_delete">Delete list</string> <string name="action_lists_delete">Excluir lista</string>
<string name="no_comments">Be the first to leave a comment on this video with the top right button!</string> <string name="no_comments">Seja o primeiro a comentar o vídeo tocando no botão superior direito!</string>
<string name="comment_no_allowed_peertube">Comments are not enabled on this video!</string> <string name="comment_no_allowed_peertube">Os comentários deste vídeo foram desativados!</string>
<string name="pickup_resolution">Pick up a resolution</string> <string name="pickup_resolution">Selecione uma resolução</string>
<string name="bookmark_add_peertube">The video has been added to bookmarks!</string> <string name="bookmark_add_peertube">Vídeo favoritado!</string>
<string name="bookmark_remove_peertube">The video has been removed from bookmarks!</string> <string name="bookmark_remove_peertube">Vídeo desfavoritado!</string>
<string name="information" tools:ignore="UnusedResources">Information</string> <string name="information" tools:ignore="UnusedResources">Informação</string>
<string name="app_logo">Logo of the application</string> <string name="app_logo">Logótipo do aplicativo</string>
<!-- languages not translated --> <!-- languages not translated -->
<string name="subscriptions">Subscriptions</string> <string name="subscriptions">Inscrições</string>
<string name="delete_comment">Delete a comment</string> <string name="delete_instance">Delete an instance</string>
<string name="delete_comment_confirm">Are you sure to delete this comment?</string> <string name="delete_instance_confirm">Are you sure to delete this instance?</string>
<string name="set_video_mode">Mode for videos</string> <string name="delete_comment">Excluir comentário</string>
<string name="my_videos">My videos</string> <string name="delete_comment_confirm">Tem certeza de que deseja excluir este comentário?</string>
<string name="title">Title</string> <string name="set_video_mode">Modo para vídeos</string>
<string name="license">License</string> <string name="filter">Filtro</string>
<string name="category">Category</string> <string name="sepia_search">Sepia search</string>
<string name="language">Language</string> <string name="sepia_element_nsfw">Display sensitive content</string>
<string name="peertube_nsfw">This video contains mature or explicit content</string> <string name="sepia_element_published_date">Published date</string>
<string name="peertube_enable_comments">Enable video comments</string> <string name="any">Any</string>
<string name="description">Description</string> <string name="today">Today</string>
<string name="toast_peertube_video_updated">The video has been updated!</string> <string name="last_7_days">Last 7 days</string>
<string name="last_30_days">Last 30 days</string>
<string name="last_365_days">Last 365 days</string>
<string name="sepia_element_duration">Duration</string>
<string name="duration_short"><![CDATA[Short (<4 min)]]></string>
<string name="duration_medium"><![CDATA[Medium (410 min)]]></string>
<string name="duration_long"><![CDATA[Long (> 10 min)]]></string>
<string name="display_all_categories">Display all categories</string>
<string name="display_all_licenses">Display all licenses</string>
<string name="display_all_languages">Display all languages</string>
<string name="all_of_these_tags">All of these tags</string>
<string name="one_of_these_tags">One of these tags</string>
<string name="apply_filter">Apply filter</string>
<string-array name="sort_by_array">
<item>Best match</item>
<item>Most recent</item>
<item>Least recent</item>
</string-array>
<string name="sort_by">Sort by</string>
<string name="sepia_search_hint">Keyword, channel, video, etc.</string>
<string name="sepia_indication">Sepia Search displays videos and channels that match your search but is not the publisher, nor the owner. If you notice any problems with a video, report it to the administrators on the PeerTube website where the video is published.</string>
<string name="my_videos">Meus vídeos</string>
<string name="title">Título</string>
<string name="license">Licença</string>
<string name="category">Categoria</string>
<string name="language">Idioma</string>
<string name="peertube_nsfw">Este vídeo possui conteúdo adulto ou explícito</string>
<string name="peertube_enable_comments">Ativar comentários do vídeo</string>
<string name="description">Descrição</string>
<string name="toast_peertube_video_updated">O vídeo foi atualizado!</string>
<string name="register_account">Register an account</string> <string name="register_account">Register an account</string>
<string name="email_address">Email address</string> <string name="email_address">Email address</string>
<string name="preview">Preview</string> <string name="preview">Preview</string>
<string name="change_preview">Change preview</string> <string name="change_preview">Change preview</string>
<string name="name">Name</string> <string name="name">Name</string>
<string name="display_more">Display more</string> <string name="display_more">Mostrar mais</string>
<string name="no_channels">No channels!</string> <string name="no_channels">No channels!</string>
<string name="report_helper">Some explanations about your report…</string> <string name="report_helper">Some explanations about your report…</string>
<string name="report_video">Report video</string> <string name="report_video">Report video</string>
<string name="report">Report</string> <string name="report">Denunciar</string>
<string name="change_instance">Pick another instance</string> <string name="change_instance">Pick another instance</string>
<string name="my_history">History</string> <string name="my_history">Histórico</string>
<string name="edit">Edit</string> <string name="edit">Editar</string>
<string name="video_settings">Video settings</string> <string name="video_settings">Video settings</string>
<string name="app_interface">Interface</string> <string name="app_interface">Interface</string>
<string name="set_cache_mode">Cache</string> <string name="set_cache_mode">Cache</string>
<string name="set_video_cache_description">Définir le cache pour les vidéos (défaut 100Mo)</string> <string name="set_video_cache_description">Set the cache for videos (default 100Mb)</string>
<string name="set_video_quality_description">Define a default quality for videos</string> <string name="set_video_quality_description">Define a default quality for videos</string>
<string name="set_quality_mode">Resolution for videos</string> <string name="set_quality_mode">Resolution for videos</string>
<string name="video_cache_value">Video cache: %d Mb</string> <string name="video_cache_value">Video cache: %d Mb</string>
@ -115,54 +198,73 @@
<string name="pickup_captions">Pick captions</string> <string name="pickup_captions">Pick captions</string>
<string name="none">None</string> <string name="none">None</string>
<string name="set_video_mode_description">Allows to change mode for playing videos (default, streaming or via a browser).</string> <string name="set_video_mode_description">Allows to change mode for playing videos (default, streaming or via a browser).</string>
<string name="delete_video">Delete video</string> <string name="delete_account_comment">Delete account comments</string>
<string name="delete_video_confirmation">Are you sure to delete this video?</string> <string name="delete_account_comment_confirm">Are you sure you want to remove all the comments of this account?</string>
<string name="no_video_to_display">No videos to display!</string> <string name="delete_video">Excluir vídeo</string>
<string name="share">Share</string> <string name="delete_video_confirmation">Tem certeza de que deseja excluir este vídeo?</string>
<string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> commented your video <b>%2$s</b>]]></string> <string name="no_video_to_display">Sem vídeos!</string>
<string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> is following your channel <b>%2$s</b>]]></string> <string name="share">Compartilhar</string>
<string name="peertube_follow_account"><![CDATA[<b>%1$s</b> is following your account]]></string> <string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> comentou seu vídeo <b>%2$s</b>]]></string>
<string name="peertube_video_published"><![CDATA[Your video <b>%1$s</b> has been published]]></string> <string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> está seguindo seu canal <b>%2$s</b>]]></string>
<string name="peertube_video_import_success"><![CDATA[Your video import <b>%1$s</b> succeeded]]></string> <string name="peertube_follow_account"><![CDATA[<b>%1$s</b> está seguindo sua conta]]></string>
<string name="peertube_video_import_error"><![CDATA[Your video import <b>%1$s</b> failed]]></string> <string name="peertube_video_published"><![CDATA[Seu vídeo <b>%1$s</b> foi publicado]]></string>
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> published a new video: <b>%2$s</b>]]></string> <string name="peertube_video_import_success"><![CDATA[Seu vídeo <b>%1$s</b> foi importado com sucesso]]></string>
<string name="peertube_video_blacklist"><![CDATA[Your video <b>%1$s</b> has been blacklisted]]></string> <string name="peertube_video_import_error"><![CDATA[Falha ao importar seu vídeo <b>%1$s</b>]]></string>
<string name="peertube_video_unblacklist"><![CDATA[Your video <b>%1$s</b> has been unblacklisted]]></string> <string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> publicou um novo vídeo: <b>%2$s</b>]]></string>
<string name="peertube_video_blacklist"><![CDATA[Seu vídeo <b>%1$s</b> foi bloqueado]]></string>
<string name="peertube_video_unblacklist"><![CDATA[Seu vídeo <b>%1$s</b> foi desbloqueado]]></string>
<string name="peertube_video_report_success"><![CDATA[Your abuse report <b>%1$s</b> has been accepted]]></string>
<string name="peertube_video_abuse"><![CDATA[New abuse report for video: <b>%1$s</b>]]></string> <string name="peertube_video_abuse"><![CDATA[New abuse report for video: <b>%1$s</b>]]></string>
<string name="add_public_comment">Add a public comment</string> <string name="add_public_comment">Adicionar um comentário público</string>
<string name="send_comment">Send comment</string> <string name="send_comment">Enviar comentário</string>
<string name="all">All</string> <string name="all">Tudo</string>
<!-- end languages --> <!-- end languages -->
<string name="playlists">Playlists</string> <string name="delete_history">Delete videos history</string>
<string name="display_name">Display name</string> <string name="delete_history_confirm">Are you sure you want to delete all your videos history?</string>
<string name="export_list">Export</string>
<string name="import_list">Import</string>
<string name="export_notification_title">Successful export!</string>
<string name="export_notification_content">Tap here to send the export by email</string>
<string name="export_notification_subjet">New Playlist</string>
<string name="export_notification_body">Open the attached file with TubeLab</string>
<string name="playlists">Listas de reprodução</string>
<string name="no_playlist">No playlists</string>
<string name="display_name">Nome de exibição</string>
<string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string> <string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string>
<string name="error_display_name">You must provide a display name!</string> <string name="error_display_name">Você deve inserir um nome de exibição!</string>
<string name="error_channel_mandatory">The channel is required when the playlist is public.</string> <string name="error_channel_mandatory">O canal é necessário quando a lista é pública.</string>
<string name="action_playlist_create">Create a playlist</string> <string name="action_playlist_create">Criar uma lista</string>
<string name="action_playlist_empty_content">There is nothing in this playlist yet.</string> <string name="action_playlist_empty_content">Lista vazia.</string>
<string name="password_confirm">Confirm password</string> <string name="password_confirm">Confirmar senha</string>
<string name="agreement_check">I agree to %1$s and %2$s</string> <string name="agreement_check">Eu concordo com %1$s e %2$s</string>
<string name="server_rules">server rules</string> <string name="server_rules">regras da instância</string>
<string name="tos">terms of service</string> <string name="tos">termos de serviço</string>
<string name="sign_up">Sign up</string> <string name="sign_up">Criar conta</string>
<string name="all_field_filled">Please, fill all the fields!</string> <string name="all_field_filled">Por favor, preencha tudo!</string>
<string name="password_error">Passwords don\'t match!</string> <string name="password_error">Senhas não combinam!</string>
<string name="email_error">The email doesn\'t seem to be valid!</string> <string name="email_error">E-mail não parece válido!</string>
<string name="email_indicator">You will be sent a confirmation e-mail</string> <string name="email_indicator">Você receberá um e-mail de confirmação</string>
<string name="password_indicator">Use at least 8 characters</string> <string name="password_indicator">Usar no mínimo 8 caracteres</string>
<string name="password_too_short">Password should contain at least 8 characters</string> <string name="password_too_short">Senha deve conter no mínimo 8 caracteres</string>
<string name="username_error">Username should only contain letters, numbers and underscores</string> <string name="username_error">Nome de usuário deve conter somente letras, números e underlines</string>
<string name="account_created">Account created!</string> <string name="account_created">Conta criada!</string>
<string name="account_created_message"> Your account has been created!\n\n <string name="account_created_message"> Your account has been created!\n\n
Think to validate your email within the 48 next hours.\n\n Think to validate your email within the 48 next hours.\n\n
You can now connect your account by writing <b>%1$s</b> in the first field and tap on <b>Connect</b>.\n\n You can now connect your account by writing <b>%1$s</b> in the first field and tap on <b>Connect</b>.\n\n
<b>Important</b>: If your instance required validation, you will receive an email once it is validated! <b>Important</b>: If your instance required validation, you will receive an email once it is validated!
</string> </string>
<string name="account">Account</string> <string name="account">Conta</string>
<string name="report_account">Report account</string> <string name="report_account">Report account</string>
<string-array name="settings_video_mode"> <string-array name="settings_video_mode">
<item>Normal</item>
<item>Webview</item> <item>Webview</item>
<item>Direct stream</item> <item>Magnet</item>
<item>Torrent</item>
</string-array>
<string-array name="settings_theme">
<item>Diurno</item>
<item>Noturno</item>
<item>Automatic</item>
</string-array> </string-array>
<string-array name="settings_video_quality"> <string-array name="settings_video_quality">
<item>High</item> <item>High</item>
@ -173,14 +275,15 @@
<string name="title_video_peertube">Title for the video</string> <string name="title_video_peertube">Title for the video</string>
<string name="join_peertube">Join Peertube</string> <string name="join_peertube">Join Peertube</string>
<string name="agreement_check_peertube">I am at least 16 years old and agree to the %1$s of this instance</string> <string name="agreement_check_peertube">I am at least 16 years old and agree to the %1$s of this instance</string>
<string name="edit_profile">Edit profile</string> <string name="edit_profile">Editar perfil</string>
<string name="make_an_action">Make an action</string> <string name="make_an_action">Make an action</string>
<string name="action_unfollow">Unfollow</string> <string name="action_unfollow">Deixar de seguir</string>
<string name="display_nsfw_videos">Display sensitive videos</string> <string name="display_nsfw_videos">Display sensitive videos</string>
<string name="fullscreen">Fullscreen</string> <string name="fullscreen">Fullscreen</string>
<string name="bookmark_peertube_empty">There are no videos in your favourites!</string> <string name="bookmark_peertube_empty">There are no videos in your favourites!</string>
<string name="delete_channel">Remove channel</string> <string name="delete_channel">Remove channel</string>
<string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string> <string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string>
<string name="modify_playlists">Video in playlists</string>
<string name="no_muted">No muted accounts!</string> <string name="no_muted">No muted accounts!</string>
<string name="error_display_name_channel">You must define a name and a display name for this channel!</string> <string name="error_display_name_channel">You must define a name and a display name for this channel!</string>
<string name="action_channel_create">Create a channel</string> <string name="action_channel_create">Create a channel</string>
@ -196,23 +299,24 @@
<string name="edit_video">Edit video</string> <string name="edit_video">Edit video</string>
<string name="create_an_account">Create an account</string> <string name="create_an_account">Create an account</string>
<string name="followers_count">%1$s Subscribers</string> <string name="followers_count">%1$s Subscribers</string>
<string name="developer">Developer</string> <string name="developer">Programador</string>
<string name="about_vesrion">Release %1$s</string> <string name="about_vesrion">Versão %1$s</string>
<string name="about_the_app">About the app</string> <string name="about_the_app">Sobre a aplicação</string>
<string name="Donate">Donate</string> <string name="Donate">Doar</string>
<string name="source_code">Source code</string> <string name="source_code">Código-fonte</string>
<string name="issue_tracker">Issue tracker</string> <string name="issue_tracker">Erros e problemas</string>
<string name="action_instance_empty_content">No instances match these criteria</string> <string name="action_instance_empty_content">No instances match these criteria</string>
<string name="instances_picker">Instances picker</string> <string name="instances_picker">Instances picker</string>
<string name="pickup_instance">Pick this instance</string> <string name="pickup_instance">Pick this instance</string>
<string name="sensitive_video"> Sensitive videos</string> <string name="sensitive_video"> Sensitive videos</string>
<string name="sensitive_content">Sensitive content: %1$s</string> <string name="sensitive_content">Sensitive content: %1$s</string>
<string name="followers_instance">%1$s instance followers</string> <string name="followers_instance">%1$s instance followers</string>
<string name="help">Help</string> <string name="help">Ajuda</string>
<string name="pickup_categories">Pick categories</string> <string name="pickup_categories">Pick categories</string>
<string name="pickup_languages">Pick languages</string> <string name="pickup_languages">Pick languages</string>
<string name="notification_channel_name">Update information</string> <string name="notification_channel_name">Update information</string>
<string name="add_account">Add an account</string> <string name="fetch_notification_channel_name">Fetch notifications</string>
<string name="add_account">Adicionar conta</string>
<string name="list_of_accounts">List of accounts</string> <string name="list_of_accounts">List of accounts</string>
<string name="pause">Pause</string> <string name="pause">Pause</string>
<string name="play">Play</string> <string name="play">Play</string>

View File

@ -1,9 +1,46 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"> <resources xmlns:tools="http://schemas.android.com/tools">
<string name="title_home">Home</string> <string name="set_video_in_list">Videos in list</string>
<string name="set_video_in_list_description">Change the layout for displaying videos in a list</string>
<string name="no_instances">No instances !</string>
<string name="show_more">Show more</string>
<string name="show_less">Show less</string>
<string name="set_play_screen_lock">Screen lock</string>
<string name="set_play_screen_lock_description">Keep playing videos when the screen is locked</string>
<string name="save">Save</string>
<string name="enable_history">Enable history</string>
<string name="change_profile_picture">Change profile picture</string>
<string name="set_autoplay">Automatic playback</string>
<string name="set_autoplay_description">If enabled, videos will be played automatically</string>
<string name="set_fullscreen">Fullscreen</string>
<string name="set_fullscreen_description">Automatically open videos in fullscreen</string>
<string name="set_autoplay_next_video">Automatically start playing the next video</string>
<string name="set_autoplay_next_video_description">When a video ends, follow up with the next suggested video.</string>
<string name="add_public_reply">Add a public reply</string>
<string name="activity">Activity</string>
<string name="app">App</string>
<string name="notif_new_video">New video from your subscriptions</string>
<string name="notif_new_comment">New comment on your video</string>
<string name="notif_blocked">One of your video is blocked/unblocked</string>
<string name="notif_video_published">Video published (after transcoding/scheduled update)</string>
<string name="notif_video_imported">Video import finished</string>
<string name="notif_new_followers">You or your channel(s) has a new follower</string>
<string name="notif_video_mention">Someone mentioned you in video comments</string>
<string name="notif_abuse_received">An abuse report received a new message</string>
<string name="notif_abuse_accepted">One of your abuse reports has been accepted or rejected by moderators</string>
<plurals name="number_of_replies">
<item quantity="one">%d răspuns</item>
<item quantity="few">%d răspunsuri</item>
<item quantity="other">%d răspunsuri</item>
</plurals>
<string name="reply">Reply</string>
<string name="set_theme">Theme</string>
<string name="set_theme_description">Allow to change app theme</string>
<string name="federation_issue">The video cannot be federated!</string>
<string name="title_home">Prima pagină</string>
<string name="title_local">Local</string> <string name="title_local">Local</string>
<string name="title_discover">Discover</string> <string name="title_discover">Discover</string>
<string name="title_notifications">Notifications</string> <string name="title_notifications">Notificări</string>
<string name="title_recently_added">Recently added</string> <string name="title_recently_added">Recently added</string>
<string name="title_trending">Trending</string> <string name="title_trending">Trending</string>
<string name="title_most_liked">Most liked</string> <string name="title_most_liked">Most liked</string>
@ -19,21 +56,38 @@
<string name="no_videos">No videos!</string> <string name="no_videos">No videos!</string>
<string name="no_notifications">No notifications!</string> <string name="no_notifications">No notifications!</string>
<string name="favicon">Favicon</string> <string name="favicon">Favicon</string>
<string name="open_with">Open with</string> <string name="open_with">Deschide cu</string>
<string name="action_playlist_edit">Edit a playlist</string> <string name="action_playlist_edit">Edit a playlist</string>
<string name="close">Close</string> <string name="close">Închide</string>
<string name="upload_video">Upload</string> <string name="upload_video">Upload</string>
<string name="image_preview">Image preview</string> <string name="image_preview">Image preview</string>
<string name="file_to_upload">Select the file to upload</string> <string name="file_to_upload">Select the file to upload</string>
<string name="new_video">New video</string>
<string name="new_blacklist">New blacklist info</string>
<string name="new_my_video_published">Your video is published</string>
<string name="new_my_video_error">Error when publishing your video</string>
<string name="new_comment">New comment</string>
<string name="new_follow">New follow</string>
<string name="channel">Channel</string> <string name="channel">Channel</string>
<string name="videos">Videos</string> <string name="videos">Videos</string>
<string name="channels">Channels</string> <string name="channels">Channels</string>
<string name="yes">Yes</string> <string name="refresh_every">Fetch every:</string>
<string name="no">No</string> <string-array name="refresh_time">
<string name="cancel">Cancel</string> <item>Never</item>
<string name="download">Download</string> <item>15 minutes</item>
<item>30 minutes</item>
<item>1 hour</item>
<item>2 hours</item>
<item>6 hours</item>
<item>12 hours</item>
</string-array>
<string name="yes">Da</string>
<string name="no">Nu</string>
<string name="cancel">Anulare</string>
<string name="download">Descărcați</string>
<string name="profile_picture">Profile picture</string> <string name="profile_picture">Profile picture</string>
<string name="update_video">Update video</string> <string name="update_video">Update video</string>
<string name="remove_from_playlist">Remove from playlist</string>
<string name="date_seconds">%d s</string> <string name="date_seconds">%d s</string>
<string name="date_minutes">%d m</string> <string name="date_minutes">%d m</string>
<string name="date_hours">%d h</string> <string name="date_hours">%d h</string>
@ -44,30 +98,31 @@
<string name="upload_video_success">The video has been uploaded!</string> <string name="upload_video_success">The video has been uploaded!</string>
<string name="toast_cancelled">Upload cancelled!</string> <string name="toast_cancelled">Upload cancelled!</string>
<string name="video_uploaded_action">Tap here to edit the video data.</string> <string name="video_uploaded_action">Tap here to edit the video data.</string>
<string name="toot_select_image_error">An error occurred while selecting the media!</string> <string name="toot_select_image_error">A aparut o eroare în timp ce selectați media!</string>
<string name="download_file">Download %1$s</string> <string name="download_file">Descărcat %1$s</string>
<string name="action_privacy">Privacy</string> <string name="account_updated">The account has been updated!</string>
<string name="action_logout">Logout</string> <string name="action_privacy">Confidențialitate</string>
<string name="login">Login</string> <string name="action_logout">Deconectare</string>
<string name="password">Password</string> <string name="login">Autentificare</string>
<string name="password">Parolă</string>
<string name="email">Email</string> <string name="email">Email</string>
<string name="tags">Tags</string> <string name="tags">Etichete</string>
<string name="validate">Validate</string> <string name="validate">Validează</string>
<string name="share_with">Share with</string> <string name="share_with">Distribuie cu</string>
<string name="shared_via">Shared via TubeLab</string> <string name="shared_via">Shared via TubeLab</string>
<string name="username">User name</string> <string name="username">Utilizator</string>
<string name="settings">Settings</string> <string name="settings">Setări</string>
<string name="logout_account_confirmation">Are you sure you want to logout @%1$s@%2$s?</string> <string name="logout_account_confirmation">Are you sure you want to logout @%1$s@%2$s?</string>
<string name="following">Following</string> <string name="following">Urmăriți</string>
<string name="followers">Followers</string> <string name="followers">Cei care vă urmăresc</string>
<string name="client_error">Unable to get client id!</string> <string name="client_error">Imposibil de obținut Id-ul clientului!</string>
<string name="toast_error_loading_account">An error occurred while switching between accounts!</string> <string name="toast_error_loading_account">A apărut o eroare în timp ce schimbați între conturi!</string>
<string name="toast_error_search">An error occurred while searching!</string> <string name="toast_error_search">S-a produs o eroare în timpul căutării!</string>
<string name="nothing_to_do">No action can be taken</string> <string name="nothing_to_do">Nu se poate efectua nici o acțiune</string>
<string name="action_follow">Follow</string> <string name="action_follow">Urmărește</string>
<string name="action_mute">Mute</string> <string name="action_mute">Mod silențios</string>
<string name="search">Search</string> <string name="search">Căutare</string>
<string name="delete">Delete</string> <string name="delete">Șterge</string>
<string name="action_lists_confirm_delete">Are you sure you want to permanently delete this list?</string> <string name="action_lists_confirm_delete">Are you sure you want to permanently delete this list?</string>
<string name="action_lists_delete">Delete list</string> <string name="action_lists_delete">Delete list</string>
<string name="no_comments">Be the first to leave a comment on this video with the top right button!</string> <string name="no_comments">Be the first to leave a comment on this video with the top right button!</string>
@ -79,9 +134,38 @@
<string name="app_logo">Logo of the application</string> <string name="app_logo">Logo of the application</string>
<!-- languages not translated --> <!-- languages not translated -->
<string name="subscriptions">Subscriptions</string> <string name="subscriptions">Subscriptions</string>
<string name="delete_instance">Delete an instance</string>
<string name="delete_instance_confirm">Are you sure to delete this instance?</string>
<string name="delete_comment">Delete a comment</string> <string name="delete_comment">Delete a comment</string>
<string name="delete_comment_confirm">Are you sure to delete this comment?</string> <string name="delete_comment_confirm">Are you sure to delete this comment?</string>
<string name="set_video_mode">Mode for videos</string> <string name="set_video_mode">Mode for videos</string>
<string name="filter">Filter</string>
<string name="sepia_search">Sepia search</string>
<string name="sepia_element_nsfw">Display sensitive content</string>
<string name="sepia_element_published_date">Published date</string>
<string name="any">Any</string>
<string name="today">Today</string>
<string name="last_7_days">Last 7 days</string>
<string name="last_30_days">Last 30 days</string>
<string name="last_365_days">Last 365 days</string>
<string name="sepia_element_duration">Duration</string>
<string name="duration_short"><![CDATA[Short (<4 min)]]></string>
<string name="duration_medium"><![CDATA[Medium (410 min)]]></string>
<string name="duration_long"><![CDATA[Long (> 10 min)]]></string>
<string name="display_all_categories">Display all categories</string>
<string name="display_all_licenses">Display all licenses</string>
<string name="display_all_languages">Display all languages</string>
<string name="all_of_these_tags">All of these tags</string>
<string name="one_of_these_tags">One of these tags</string>
<string name="apply_filter">Apply filter</string>
<string-array name="sort_by_array">
<item>Best match</item>
<item>Most recent</item>
<item>Least recent</item>
</string-array>
<string name="sort_by">Sort by</string>
<string name="sepia_search_hint">Keyword, channel, video, etc.</string>
<string name="sepia_indication">Sepia Search displays videos and channels that match your search but is not the publisher, nor the owner. If you notice any problems with a video, report it to the administrators on the PeerTube website where the video is published.</string>
<string name="my_videos">My videos</string> <string name="my_videos">My videos</string>
<string name="title">Title</string> <string name="title">Title</string>
<string name="license">License</string> <string name="license">License</string>
@ -100,14 +184,14 @@
<string name="no_channels">No channels!</string> <string name="no_channels">No channels!</string>
<string name="report_helper">Some explanations about your report…</string> <string name="report_helper">Some explanations about your report…</string>
<string name="report_video">Report video</string> <string name="report_video">Report video</string>
<string name="report">Report</string> <string name="report">Raportează</string>
<string name="change_instance">Pick another instance</string> <string name="change_instance">Pick another instance</string>
<string name="my_history">History</string> <string name="my_history">History</string>
<string name="edit">Edit</string> <string name="edit">Edit</string>
<string name="video_settings">Video settings</string> <string name="video_settings">Video settings</string>
<string name="app_interface">Interface</string> <string name="app_interface">Interface</string>
<string name="set_cache_mode">Cache</string> <string name="set_cache_mode">Memorie cache</string>
<string name="set_video_cache_description">Définir le cache pour les vidéos (défaut 100Mo)</string> <string name="set_video_cache_description">Set the cache for videos (default 100Mb)</string>
<string name="set_video_quality_description">Define a default quality for videos</string> <string name="set_video_quality_description">Define a default quality for videos</string>
<string name="set_quality_mode">Resolution for videos</string> <string name="set_quality_mode">Resolution for videos</string>
<string name="video_cache_value">Video cache: %d Mb</string> <string name="video_cache_value">Video cache: %d Mb</string>
@ -115,10 +199,12 @@
<string name="pickup_captions">Pick captions</string> <string name="pickup_captions">Pick captions</string>
<string name="none">None</string> <string name="none">None</string>
<string name="set_video_mode_description">Allows to change mode for playing videos (default, streaming or via a browser).</string> <string name="set_video_mode_description">Allows to change mode for playing videos (default, streaming or via a browser).</string>
<string name="delete_account_comment">Delete account comments</string>
<string name="delete_account_comment_confirm">Are you sure you want to remove all the comments of this account?</string>
<string name="delete_video">Delete video</string> <string name="delete_video">Delete video</string>
<string name="delete_video_confirmation">Are you sure to delete this video?</string> <string name="delete_video_confirmation">Are you sure to delete this video?</string>
<string name="no_video_to_display">No videos to display!</string> <string name="no_video_to_display">No videos to display!</string>
<string name="share">Share</string> <string name="share">Distribuie</string>
<string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> commented your video <b>%2$s</b>]]></string> <string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> commented your video <b>%2$s</b>]]></string>
<string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> is following your channel <b>%2$s</b>]]></string> <string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> is following your channel <b>%2$s</b>]]></string>
<string name="peertube_follow_account"><![CDATA[<b>%1$s</b> is following your account]]></string> <string name="peertube_follow_account"><![CDATA[<b>%1$s</b> is following your account]]></string>
@ -128,12 +214,22 @@
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> published a new video: <b>%2$s</b>]]></string> <string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> published a new video: <b>%2$s</b>]]></string>
<string name="peertube_video_blacklist"><![CDATA[Your video <b>%1$s</b> has been blacklisted]]></string> <string name="peertube_video_blacklist"><![CDATA[Your video <b>%1$s</b> has been blacklisted]]></string>
<string name="peertube_video_unblacklist"><![CDATA[Your video <b>%1$s</b> has been unblacklisted]]></string> <string name="peertube_video_unblacklist"><![CDATA[Your video <b>%1$s</b> has been unblacklisted]]></string>
<string name="peertube_video_report_success"><![CDATA[Your abuse report <b>%1$s</b> has been accepted]]></string>
<string name="peertube_video_abuse"><![CDATA[New abuse report for video: <b>%1$s</b>]]></string> <string name="peertube_video_abuse"><![CDATA[New abuse report for video: <b>%1$s</b>]]></string>
<string name="add_public_comment">Add a public comment</string> <string name="add_public_comment">Add a public comment</string>
<string name="send_comment">Send comment</string> <string name="send_comment">Send comment</string>
<string name="all">All</string> <string name="all">All</string>
<!-- end languages --> <!-- end languages -->
<string name="delete_history">Delete videos history</string>
<string name="delete_history_confirm">Are you sure you want to delete all your videos history?</string>
<string name="export_list">Export</string>
<string name="import_list">Import</string>
<string name="export_notification_title">Successful export!</string>
<string name="export_notification_content">Tap here to send the export by email</string>
<string name="export_notification_subjet">New Playlist</string>
<string name="export_notification_body">Open the attached file with TubeLab</string>
<string name="playlists">Playlists</string> <string name="playlists">Playlists</string>
<string name="no_playlist">No playlists</string>
<string name="display_name">Display name</string> <string name="display_name">Display name</string>
<string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string> <string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string>
<string name="error_display_name">You must provide a display name!</string> <string name="error_display_name">You must provide a display name!</string>
@ -161,8 +257,15 @@
<string name="account">Account</string> <string name="account">Account</string>
<string name="report_account">Report account</string> <string name="report_account">Report account</string>
<string-array name="settings_video_mode"> <string-array name="settings_video_mode">
<item>Normal</item>
<item>Webview</item> <item>Webview</item>
<item>Direct stream</item> <item>Magnet</item>
<item>Torrent</item>
</string-array>
<string-array name="settings_theme">
<item>Light</item>
<item>Dark</item>
<item>Automatic</item>
</string-array> </string-array>
<string-array name="settings_video_quality"> <string-array name="settings_video_quality">
<item>High</item> <item>High</item>
@ -173,14 +276,15 @@
<string name="title_video_peertube">Title for the video</string> <string name="title_video_peertube">Title for the video</string>
<string name="join_peertube">Join Peertube</string> <string name="join_peertube">Join Peertube</string>
<string name="agreement_check_peertube">I am at least 16 years old and agree to the %1$s of this instance</string> <string name="agreement_check_peertube">I am at least 16 years old and agree to the %1$s of this instance</string>
<string name="edit_profile">Edit profile</string> <string name="edit_profile">Editează profilul</string>
<string name="make_an_action">Make an action</string> <string name="make_an_action">Make an action</string>
<string name="action_unfollow">Unfollow</string> <string name="action_unfollow">Nu mai urmări</string>
<string name="display_nsfw_videos">Display sensitive videos</string> <string name="display_nsfw_videos">Display sensitive videos</string>
<string name="fullscreen">Fullscreen</string> <string name="fullscreen">Fullscreen</string>
<string name="bookmark_peertube_empty">There are no videos in your favourites!</string> <string name="bookmark_peertube_empty">There are no videos in your favourites!</string>
<string name="delete_channel">Remove channel</string> <string name="delete_channel">Remove channel</string>
<string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string> <string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string>
<string name="modify_playlists">Video in playlists</string>
<string name="no_muted">No muted accounts!</string> <string name="no_muted">No muted accounts!</string>
<string name="error_display_name_channel">You must define a name and a display name for this channel!</string> <string name="error_display_name_channel">You must define a name and a display name for this channel!</string>
<string name="action_channel_create">Create a channel</string> <string name="action_channel_create">Create a channel</string>
@ -196,8 +300,8 @@
<string name="edit_video">Edit video</string> <string name="edit_video">Edit video</string>
<string name="create_an_account">Create an account</string> <string name="create_an_account">Create an account</string>
<string name="followers_count">%1$s Subscribers</string> <string name="followers_count">%1$s Subscribers</string>
<string name="developer">Developer</string> <string name="developer">Programator</string>
<string name="about_vesrion">Release %1$s</string> <string name="about_vesrion">Lansare %1$s</string>
<string name="about_the_app">About the app</string> <string name="about_the_app">About the app</string>
<string name="Donate">Donate</string> <string name="Donate">Donate</string>
<string name="source_code">Source code</string> <string name="source_code">Source code</string>
@ -212,7 +316,8 @@
<string name="pickup_categories">Pick categories</string> <string name="pickup_categories">Pick categories</string>
<string name="pickup_languages">Pick languages</string> <string name="pickup_languages">Pick languages</string>
<string name="notification_channel_name">Update information</string> <string name="notification_channel_name">Update information</string>
<string name="add_account">Add an account</string> <string name="fetch_notification_channel_name">Fetch notifications</string>
<string name="add_account">Adaugă un cont</string>
<string name="list_of_accounts">List of accounts</string> <string name="list_of_accounts">List of accounts</string>
<string name="pause">Pause</string> <string name="pause">Pause</string>
<string name="play">Play</string> <string name="play">Play</string>

View File

@ -1,16 +1,54 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"> <resources xmlns:tools="http://schemas.android.com/tools">
<string name="title_home">Главная страница</string> <string name="set_video_in_list">Видео в списке</string>
<string name="title_local">Local</string> <string name="set_video_in_list_description">Изменить расположение для отображения видео в списке</string>
<string name="no_instances">No instances !</string>
<string name="show_more">Показать еще</string>
<string name="show_less">Показать меньше</string>
<string name="set_play_screen_lock">Блокировка экрана</string>
<string name="set_play_screen_lock_description">Продолжать воспроизведение видео, когда экран заблокирован</string>
<string name="save">Сохранить</string>
<string name="enable_history">Включить историю</string>
<string name="change_profile_picture">Изменить изображение профиля</string>
<string name="set_autoplay">Автоматическое воспроизведение</string>
<string name="set_autoplay_description">Если включено, видео будут воспроизводиться автоматически</string>
<string name="set_fullscreen">Полноэкранный режим</string>
<string name="set_fullscreen_description">Автоматически открывать видео в полноэкранном режиме</string>
<string name="set_autoplay_next_video">Автоматически начать воспроизведение следующего видео</string>
<string name="set_autoplay_next_video_description">Когда видео заканчивается, перейдите к следующему предложенному видео.</string>
<string name="add_public_reply">Добавить публичный ответ</string>
<string name="activity">Действия</string>
<string name="app">Приложение</string>
<string name="notif_new_video">Новое видео из ваших подписок</string>
<string name="notif_new_comment">Новый комментарий к вашему видео</string>
<string name="notif_blocked">Одно из ваших видео заблокировано/разблокировано</string>
<string name="notif_video_published">Видео опубликовано (после перекодирования/запланированного обновления)</string>
<string name="notif_video_imported">Импорт видео завершен</string>
<string name="notif_new_followers">Вы или ваш канал(ы) имеет нового подписчика</string>
<string name="notif_video_mention">Кто-то упомянул вас в видео комментариях</string>
<string name="notif_abuse_received">Отчет о злоупотреблениях получил новое сообщение</string>
<string name="notif_abuse_accepted">Одно из ваших сообщений о злоупотреблениях было принято или отклонено модераторами</string>
<plurals name="number_of_replies">
<item quantity="one">%d ответ</item>
<item quantity="few">%d ответов</item>
<item quantity="many">%d ответов</item>
<item quantity="other">%d ответов</item>
</plurals>
<string name="reply">Ответ</string>
<string name="set_theme">Тема</string>
<string name="set_theme_description">Позволяет менять тему приложения</string>
<string name="federation_issue">Видео не может быть объединено!</string>
<string name="title_home">Главная</string>
<string name="title_local">Локальные</string>
<string name="title_discover">Подборка</string> <string name="title_discover">Подборка</string>
<string name="title_notifications">Уведомления</string> <string name="title_notifications">Уведомления</string>
<string name="title_recently_added">Недавно добавленные</string> <string name="title_recently_added">Свежие</string>
<string name="title_trending">Популярные</string> <string name="title_trending">Актуальное</string>
<string name="title_most_liked">Много лайков</string> <string name="title_most_liked">Популярные</string>
<string name="toast_error">Упс! Произошла ошибка!</string> <string name="toast_error">Упс! Произошла ошибка!</string>
<string name="title_muted">Беззвучный</string> <string name="title_muted">Игнорируются</string>
<string name="title_channel">Каналы</string> <string name="title_channel">Каналы</string>
<string name="do_not_list">Не показывать</string> <string name="do_not_list">Скрыто</string>
<string name="blur">Размыть</string> <string name="blur">Размыть</string>
<string name="display">Показать</string> <string name="display">Показать</string>
<string name="no_opinion">Не выбрано</string> <string name="no_opinion">Не выбрано</string>
@ -23,22 +61,39 @@
<string name="action_playlist_edit">Редактировать плейлист</string> <string name="action_playlist_edit">Редактировать плейлист</string>
<string name="close">Закрыть</string> <string name="close">Закрыть</string>
<string name="upload_video">Загрузить</string> <string name="upload_video">Загрузить</string>
<string name="image_preview">Предпросмотр</string> <string name="image_preview">Предпросмотр изображения</string>
<string name="file_to_upload">Выберите файл для загрузки</string> <string name="file_to_upload">Выберите файл для загрузки</string>
<string name="new_video">Новое видео</string>
<string name="new_blacklist">Информация о новом черном списке</string>
<string name="new_my_video_published">Ваше видео опубликовано</string>
<string name="new_my_video_error">Ошибка при публикации вашего видео</string>
<string name="new_comment">Новый комментарий</string>
<string name="new_follow">Новая подписка</string>
<string name="channel">Канал</string> <string name="channel">Канал</string>
<string name="videos">Видео</string> <string name="videos">Видео</string>
<string name="channels">Каналы</string> <string name="channels">Каналы</string>
<string name="refresh_every">Получить каждые:</string>
<string-array name="refresh_time">
<item>Никогда</item>
<item>15 минут</item>
<item>30 минут</item>
<item>1 час</item>
<item>2 часа</item>
<item>6 часов</item>
<item>12 часов</item>
</string-array>
<string name="yes">Да</string> <string name="yes">Да</string>
<string name="no">Нет</string> <string name="no">Нет</string>
<string name="cancel">Отмена</string> <string name="cancel">Отмена</string>
<string name="download">Скачать</string> <string name="download">Скачать</string>
<string name="profile_picture">Изображение профиля</string> <string name="profile_picture">Изображение профиля</string>
<string name="update_video">Обновить видео</string> <string name="update_video">Обновить видео</string>
<string name="date_seconds">%d с</string> <string name="remove_from_playlist">Удалить из плейлиста</string>
<string name="date_minutes">%d м</string> <string name="date_seconds">%d сек.</string>
<string name="date_hours">%d ч</string> <string name="date_minutes">%d мин.</string>
<string name="date_day">%d д</string> <string name="date_hours">%d час.</string>
<string name="number_view_video">%s просмотров</string> <string name="date_day">%d д.</string>
<string name="number_view_video">Просмотры: %s</string>
<string name="title_instance_login">Хост экземпляра</string> <string name="title_instance_login">Хост экземпляра</string>
<string name="uploading">Загрузка, пожалуйста, подождите…</string> <string name="uploading">Загрузка, пожалуйста, подождите…</string>
<string name="upload_video_success">Видео было загружено!</string> <string name="upload_video_success">Видео было загружено!</string>
@ -46,6 +101,7 @@
<string name="video_uploaded_action">Нажмите здесь, чтобы редактировать данные видео.</string> <string name="video_uploaded_action">Нажмите здесь, чтобы редактировать данные видео.</string>
<string name="toot_select_image_error">При выборе медиафайла произошла ошибка!</string> <string name="toot_select_image_error">При выборе медиафайла произошла ошибка!</string>
<string name="download_file">Скачать %1$s</string> <string name="download_file">Скачать %1$s</string>
<string name="account_updated">Аккаунт обновлен!</string>
<string name="action_privacy">Конфиденциальность</string> <string name="action_privacy">Конфиденциальность</string>
<string name="action_logout">Выход</string> <string name="action_logout">Выход</string>
<string name="login">Войти</string> <string name="login">Войти</string>
@ -65,7 +121,7 @@
<string name="toast_error_search">Произошла ошибка при поиске!</string> <string name="toast_error_search">Произошла ошибка при поиске!</string>
<string name="nothing_to_do">Ничего нельзя сделать</string> <string name="nothing_to_do">Ничего нельзя сделать</string>
<string name="action_follow">Подписаться</string> <string name="action_follow">Подписаться</string>
<string name="action_mute">Без звука</string> <string name="action_mute">Игнорировать</string>
<string name="search">Поиск</string> <string name="search">Поиск</string>
<string name="delete">Удалить</string> <string name="delete">Удалить</string>
<string name="action_lists_confirm_delete">Вы действительно хотите удалить этот список навсегда?</string> <string name="action_lists_confirm_delete">Вы действительно хотите удалить этот список навсегда?</string>
@ -79,9 +135,38 @@
<string name="app_logo">Логотип приложения</string> <string name="app_logo">Логотип приложения</string>
<!-- languages not translated --> <!-- languages not translated -->
<string name="subscriptions">Подписки</string> <string name="subscriptions">Подписки</string>
<string name="delete_instance">Delete an instance</string>
<string name="delete_instance_confirm">Are you sure to delete this instance?</string>
<string name="delete_comment">Удалить комментарий</string> <string name="delete_comment">Удалить комментарий</string>
<string name="delete_comment_confirm">Вы уверены, что хотите удалить этот комментарий?</string> <string name="delete_comment_confirm">Вы уверены, что хотите удалить этот комментарий?</string>
<string name="set_video_mode">Режим для видео</string> <string name="set_video_mode">Режим для видео</string>
<string name="filter">Фильтр</string>
<string name="sepia_search">Поисковик Sepia</string>
<string name="sepia_element_nsfw">Показывать неприличные видео</string>
<string name="sepia_element_published_date">Дата публикации</string>
<string name="any">Любые</string>
<string name="today">Сегодня</string>
<string name="last_7_days">Последние 7 дней</string>
<string name="last_30_days">Последние 30 дней</string>
<string name="last_365_days">Последние 365 дней</string>
<string name="sepia_element_duration">Длительность</string>
<string name="duration_short"><![CDATA[Короткие (<4 мин)]]></string>
<string name="duration_medium"><![CDATA[Средние (410 мин)]]></string>
<string name="duration_long"><![CDATA[Длинные (> 10 мин)]]></string>
<string name="display_all_categories">Показать все категории</string>
<string name="display_all_licenses">Показать все лицензии</string>
<string name="display_all_languages">Показать все языки</string>
<string name="all_of_these_tags">Все с этими тегами</string>
<string name="one_of_these_tags">Один из этих тегов</string>
<string name="apply_filter">Применить фильтр</string>
<string-array name="sort_by_array">
<item>Лучшее совпадение</item>
<item>Последние</item>
<item>Ранние</item>
</string-array>
<string name="sort_by">Сортировать по</string>
<string name="sepia_search_hint">Ключевое слово, канал, видео и т. д.</string>
<string name="sepia_indication">Sepia Search отображает видео и каналы, которые соответствуют вашему поиску, но не являются ни издателем, ни владельцем. Если вы заметили какие-либо проблемы с видео, сообщите об этом администраторам на сайте PeerTube, где это видео опубликовано.</string>
<string name="my_videos">Мои видео</string> <string name="my_videos">Мои видео</string>
<string name="title">Название</string> <string name="title">Название</string>
<string name="license">Лицензия</string> <string name="license">Лицензия</string>
@ -104,17 +189,19 @@
<string name="change_instance">Выберите другой экземпляр</string> <string name="change_instance">Выберите другой экземпляр</string>
<string name="my_history">История</string> <string name="my_history">История</string>
<string name="edit">Редактировать</string> <string name="edit">Редактировать</string>
<string name="video_settings">Video settings</string> <string name="video_settings">Настройки видео</string>
<string name="app_interface">Interface</string> <string name="app_interface">Интерфейс</string>
<string name="set_cache_mode">Cache</string> <string name="set_cache_mode">Кэш</string>
<string name="set_video_cache_description">Définir le cache pour les vidéos (défaut 100Mo)</string> <string name="set_video_cache_description">Определите кэш для видео (по умолчанию 100 Мб)</string>
<string name="set_video_quality_description">Определить качество видео по умолчанию</string> <string name="set_video_quality_description">Определить качество видео по умолчанию</string>
<string name="set_quality_mode">Разрешение для видео</string> <string name="set_quality_mode">Разрешение для видео</string>
<string name="video_cache_value">Video cache: %d Mb</string> <string name="video_cache_value">Видео кэш: %d Мб</string>
<string name="captions">Субтитры</string> <string name="captions">Субтитры</string>
<string name="pickup_captions">Выбрать субтитры</string> <string name="pickup_captions">Выбрать субтитры</string>
<string name="none">Ничто</string> <string name="none">Ничто</string>
<string name="set_video_mode_description">Позволяет изменить режим воспроизведения видео (по умолчанию, потоковой или через браузер).</string> <string name="set_video_mode_description">Позволяет изменить режим воспроизведения видео (по умолчанию, потоковый или через браузер).</string>
<string name="delete_account_comment">Удалить комментарии аккаунта</string>
<string name="delete_account_comment_confirm">Вы действительно хотите удалить все комментарии этого аккаунта?</string>
<string name="delete_video">Удалить видео</string> <string name="delete_video">Удалить видео</string>
<string name="delete_video_confirmation">Вы уверены, что хотите удалить это видео?</string> <string name="delete_video_confirmation">Вы уверены, что хотите удалить это видео?</string>
<string name="no_video_to_display">Нет видео для отображения!</string> <string name="no_video_to_display">Нет видео для отображения!</string>
@ -126,14 +213,24 @@
<string name="peertube_video_import_success"><![CDATA[Ваше видео <b>%1$s</b> успешно импортировано]]></string> <string name="peertube_video_import_success"><![CDATA[Ваше видео <b>%1$s</b> успешно импортировано]]></string>
<string name="peertube_video_import_error"><![CDATA[При импорте вашего видео <b>%1$s</b> произошла ошибка]]></string> <string name="peertube_video_import_error"><![CDATA[При импорте вашего видео <b>%1$s</b> произошла ошибка]]></string>
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> опубликовал новое видео: <b>%2$s</b>]]></string> <string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> опубликовал новое видео: <b>%2$s</b>]]></string>
<string name="peertube_video_blacklist"><![CDATA[Ваше видео <b>%1$s</b> занесено в черный список]]></string> <string name="peertube_video_blacklist"><![CDATA[Ваше видео <b>%1$s</b> занесено в чёрный список]]></string>
<string name="peertube_video_unblacklist"><![CDATA[Ваше видео <b>%1$s</b> удалено из черного списка]]></string> <string name="peertube_video_unblacklist"><![CDATA[Ваше видео <b>%1$s</b> удалено из чёрного списка]]></string>
<string name="peertube_video_report_success"><![CDATA[Ваш отчёт <b>%1$s</b> об злоупотреблении был принят]]></string>
<string name="peertube_video_abuse"><![CDATA[Новый отчёт о нарушении для видео: <b>%1$s</b>]]></string> <string name="peertube_video_abuse"><![CDATA[Новый отчёт о нарушении для видео: <b>%1$s</b>]]></string>
<string name="add_public_comment">Добавить публичный комментарий</string> <string name="add_public_comment">Добавить публичный комментарий</string>
<string name="send_comment">Оставить комментарий</string> <string name="send_comment">Оставить комментарий</string>
<string name="all">Все</string> <string name="all">Все</string>
<!-- end languages --> <!-- end languages -->
<string name="delete_history">Delete videos history</string>
<string name="delete_history_confirm">Are you sure you want to delete all your videos history?</string>
<string name="export_list">Export</string>
<string name="import_list">Import</string>
<string name="export_notification_title">Successful export!</string>
<string name="export_notification_content">Tap here to send the export by email</string>
<string name="export_notification_subjet">New Playlist</string>
<string name="export_notification_body">Open the attached file with TubeLab</string>
<string name="playlists">Плейлисты</string> <string name="playlists">Плейлисты</string>
<string name="no_playlist">No playlists</string>
<string name="display_name">Отображаемое имя</string> <string name="display_name">Отображаемое имя</string>
<string name="action_playlist_add">У вас нет плейлистов. Нажмите на \"+\", чтобы добавить новый</string> <string name="action_playlist_add">У вас нет плейлистов. Нажмите на \"+\", чтобы добавить новый</string>
<string name="error_display_name">Вы должны указать отображаемое имя!</string> <string name="error_display_name">Вы должны указать отображаемое имя!</string>
@ -161,8 +258,15 @@
<string name="account">Аккаунт</string> <string name="account">Аккаунт</string>
<string name="report_account">Пожаловаться на аккаунт</string> <string name="report_account">Пожаловаться на аккаунт</string>
<string-array name="settings_video_mode"> <string-array name="settings_video_mode">
<item>По умолчанию</item>
<item>Веб-просмотр</item> <item>Веб-просмотр</item>
<item>Прямой поток</item> <item>Magnet-ссылка</item>
<item>Торрент</item>
</string-array>
<string-array name="settings_theme">
<item>Светлая</item>
<item>Тёмная</item>
<item>Авто</item>
</string-array> </string-array>
<string-array name="settings_video_quality"> <string-array name="settings_video_quality">
<item>Высокое</item> <item>Высокое</item>
@ -181,6 +285,7 @@
<string name="bookmark_peertube_empty">В избранном нет видео!</string> <string name="bookmark_peertube_empty">В избранном нет видео!</string>
<string name="delete_channel">Удалить канал</string> <string name="delete_channel">Удалить канал</string>
<string name="action_channel_confirm_delete">Вы уверены что хотите безвозвратно удалить этот канал?</string> <string name="action_channel_confirm_delete">Вы уверены что хотите безвозвратно удалить этот канал?</string>
<string name="modify_playlists">Видео в плейлисте</string>
<string name="no_muted">Нет заблокированных аккаунтов!</string> <string name="no_muted">Нет заблокированных аккаунтов!</string>
<string name="error_display_name_channel">Вы должны указать имя и отображаемое имя для этого канала!</string> <string name="error_display_name_channel">Вы должны указать имя и отображаемое имя для этого канала!</string>
<string name="action_channel_create">Создать канал</string> <string name="action_channel_create">Создать канал</string>
@ -207,17 +312,18 @@
<string name="pickup_instance">Выбрать этот экземпляр</string> <string name="pickup_instance">Выбрать этот экземпляр</string>
<string name="sensitive_video"> Неприличные видео</string> <string name="sensitive_video"> Неприличные видео</string>
<string name="sensitive_content">Неприличный контент: %1$s</string> <string name="sensitive_content">Неприличный контент: %1$s</string>
<string name="followers_instance">%1$s подписчиков у экземпляра</string> <string name="followers_instance">Подписчиков у экземпляра: %1$s</string>
<string name="help">Помощь</string> <string name="help">Помощь</string>
<string name="pickup_categories">Выбрать категории</string> <string name="pickup_categories">Выбрать категории</string>
<string name="pickup_languages">Выбрать языки</string> <string name="pickup_languages">Выбрать языки</string>
<string name="notification_channel_name">Информация об обновлении</string> <string name="notification_channel_name">Обновить данные</string>
<string name="fetch_notification_channel_name">Получать уведомления</string>
<string name="add_account">Добавление аккаунта</string> <string name="add_account">Добавление аккаунта</string>
<string name="list_of_accounts">Список аккаунтов</string> <string name="list_of_accounts">Список аккаунтов</string>
<string name="pause">Пауза</string> <string name="pause">Пауза</string>
<string name="play">Воспроизвести</string> <string name="play">Воспроизвести</string>
<string name="minimize">Свернуть</string> <string name="minimize">Свернуть</string>
<string name="fast_rewind">Быстрое перемотка</string> <string name="fast_rewind">Быстрая перемотка</string>
<string name="fast_forward">Перемотка вперед</string> <string name="fast_forward">Перемотка вперед</string>
<string name="set_video_minimize">Вид свёрнутого видео</string> <string name="set_video_minimize">Вид свёрнутого видео</string>
<string name="set_video_minimize_description">Уменьшить размер видео, когда приложение находится в фоновом режиме (Android N+)</string> <string name="set_video_minimize_description">Уменьшить размер видео, когда приложение находится в фоновом режиме (Android N+)</string>

View File

@ -1,198 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="title_home">Home</string>
<string name="title_discover">Discover</string>
<string name="title_notifications">Notifications</string>
<string name="title_recently_added">Recently added</string>
<string name="title_trending">Trending</string>
<string name="title_most_liked">Most liked</string>
<string name="toast_error">Oops! An error occurred!</string>
<string name="title_muted">Muted</string>
<string name="title_channel">Channels</string>
<string name="do_not_list">Do not list</string>
<string name="blur">Blur</string>
<string name="display">Display</string>
<string name="no_opinion">No opinion</string>
<string name="instance_choice">Pickup an instance</string>
<string name="not_valide_instance">This instance does not seem to be valid!</string>
<string name="no_videos">No videos!</string>
<string name="favicon">Favicon</string>
<string name="open_with">Open with</string>
<string name="action_playlist_edit">Edit a playlist</string>
<string name="close">Close</string>
<string name="upload_video">Upload</string>
<string name="image_preview">Image preview</string>
<string name="file_to_upload">Select the file to upload</string>
<string name="channel">Channel</string>
<string name="videos">Videos</string>
<string name="channels">Channels</string>
<string name="yes">Yes</string>
<string name="no">No</string>
<string name="cancel">Cancel</string>
<string name="download">Download</string>
<string name="profile_picture">Profile picture</string>
<string name="update_video">Update video</string>
<string name="date_seconds">%d s</string>
<string name="date_minutes">%d m</string>
<string name="date_hours">%d h</string>
<string name="date_day">%d d</string>
<string name="number_view_video">%s views</string>
<string name="title_instance_login">Instance host</string>
<string name="uploading">Uploading, please wait…</string>
<string name="upload_video_success">The video has been uploaded!</string>
<string name="toast_cancelled">Upload cancelled!</string>
<string name="video_uploaded_action">Tap here to edit the video data.</string>
<string name="toot_select_image_error">An error occurred while selecting the media!</string>
<string name="download_file">Download %1$s</string>
<string name="action_privacy">Privacy</string>
<string name="action_logout">Logout</string>
<string name="login">Login</string>
<string name="password">Password</string>
<string name="email">Email</string>
<string name="tags">Tags</string>
<string name="validate">Validate</string>
<string name="share_with">Share with</string>
<string name="shared_via">Shared via TubeLab</string>
<string name="username">User name</string>
<string name="settings">Settings</string>
<string name="logout_account_confirmation">Are you sure you want to logout @%1$s@%2$s?</string>
<string name="following">Following</string>
<string name="followers">Followers</string>
<string name="client_error">Unable to get client id!</string>
<string name="toast_error_loading_account">An error occurred while switching between accounts!</string>
<string name="toast_error_search">An error occurred while searching!</string>
<string name="nothing_to_do">No action can be taken</string>
<string name="action_follow">Follow</string>
<string name="action_mute">Mute</string>
<string name="search">Search</string>
<string name="delete">Delete</string>
<string name="action_lists_confirm_delete">Are you sure you want to permanently delete this list?</string>
<string name="action_lists_delete">Delete list</string>
<string name="no_comments">Be the first to leave a comment on this video with the top right button!</string>
<string name="comment_no_allowed_peertube">Comments are not enabled on this video!</string>
<string name="pickup_resolution">Pick up a resolution</string>
<string name="bookmark_add_peertube">The video has been added to bookmarks!</string>
<string name="bookmark_remove_peertube">The video has been removed from bookmarks!</string>
<string name="information" tools:ignore="UnusedResources">Information</string>
<string name="app_logo">Logo of the application</string>
<!-- languages not translated -->
<string name="subscriptions">Subscriptions</string>
<string name="delete_comment">Delete a comment</string>
<string name="delete_comment_confirm">Are you sure to delete this comment?</string>
<string name="set_video_mode">Mode for videos</string>
<string name="my_videos">My videos</string>
<string name="title">Title</string>
<string name="license">License</string>
<string name="category">Category</string>
<string name="language">Language</string>
<string name="peertube_nsfw">This video contains mature or explicit content</string>
<string name="peertube_enable_comments">Enable video comments</string>
<string name="description">Description</string>
<string name="toast_peertube_video_updated">The video has been updated!</string>
<string name="register_account">Register an account</string>
<string name="email_address">Email address</string>
<string name="preview">Preview</string>
<string name="change_preview">Change preview</string>
<string name="name">Name</string>
<string name="display_more">Display more</string>
<string name="no_channels">No channels!</string>
<string name="report_helper">Some explanations about your report…</string>
<string name="report_video">Report video</string>
<string name="report">Report</string>
<string name="change_instance">Pickup another instance</string>
<string name="my_history">History</string>
<string name="edit">Edit</string>
<string name="set_video_mode_description">Allows to change mode for playing videos (default, streaming or via a browser).</string>
<string name="delete_video">Delete video</string>
<string name="delete_video_confirmation">Are you sure to delete this video?</string>
<string name="no_video_to_display">No videos to display!</string>
<string name="share">Share</string>
<string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> commented your video <b>%2$s</b>]]></string>
<string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> is following your channel <b>%2$s</b>]]></string>
<string name="peertube_follow_account"><![CDATA[<b>%1$s</b> is following your account]]></string>
<string name="peertube_video_published"><![CDATA[Your video <b>%1$s</b> has been published]]></string>
<string name="peertube_video_import_success"><![CDATA[Your video import <b>%1$s</b> succeeded]]></string>
<string name="peertube_video_import_error"><![CDATA[Your video import <b>%1$s</b> failed]]></string>
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> published a new video: <b>%2$s</b>]]></string>
<string name="peertube_video_blacklist"><![CDATA[Your video <b>%1$s</b> has been blacklisted]]></string>
<string name="peertube_video_unblacklist"><![CDATA[Your video <b>%1$s</b> has been unblacklisted]]></string>
<string name="add_public_comment">Add a public comment</string>
<string name="send_comment">Send comment</string>
<string name="all">All</string>
<!-- end languages -->
<string name="playlists">Playlists</string>
<string name="display_name">Display name</string>
<string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string>
<string name="error_display_name">You must provide a display name!</string>
<string name="error_channel_mandatory">The channel is required when the playlist is public.</string>
<string name="action_playlist_create">Create a playlist</string>
<string name="action_playlist_empty_content">There is nothing in this playlist yet.</string>
<string name="password_confirm">Confirm password</string>
<string name="agreement_check">I agree to %1$s and %2$s</string>
<string name="server_rules">server rules</string>
<string name="tos">terms of service</string>
<string name="sign_up">Sign up</string>
<string name="all_field_filled">Please, fill all the fields!</string>
<string name="password_error">Passwords don\'t match!</string>
<string name="email_error">The email doesn\'t seem to be valid!</string>
<string name="email_indicator">You will be sent a confirmation e-mail</string>
<string name="password_indicator">Use at least 8 characters</string>
<string name="password_too_short">Password should contain at least 8 characters</string>
<string name="username_error">Username should only contain letters, numbers and underscores</string>
<string name="account_created">Account created!</string>
<string name="account_created_message"> Your account has been created!\n\n
Think to validate your email within the 48 next hours.\n\n
You can now connect your account by writing <b>%1$s</b> in the first field and tap on <b>Connect</b>.\n\n
<b>Important</b>: If your instance required validation, you will receive an email once it is validated!
</string>
<string name="account">Account</string>
<string name="report_account">Report account</string>
<string-array name="settings_video_mode">
<item>Webview</item>
<item>Direct stream</item>
</string-array>
<string name="unfollow_confirm">Do you want to unfollow this account?</string>
<string name="title_video_peertube">Title for the video</string>
<string name="join_peertube">Join Peertube</string>
<string name="agreement_check_peertube">I am at least 16 years old and agree to the %1$s of this instance</string>
<string name="edit_profile">Edit profile</string>
<string name="make_an_action">Make an action</string>
<string name="action_unfollow">Unfollow</string>
<string name="display_nsfw_videos">Display sensitive videos</string>
<string name="fullscreen">Fullscreen</string>
<string name="bookmark_peertube_empty">There are no videos in your favourites!</string>
<string name="delete_channel">Remove channel</string>
<string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string>
<string name="no_muted">No muted accounts!</string>
<string name="error_display_name_channel">You must define a name and a display name for this channel!</string>
<string name="action_channel_create">Create a channel</string>
<string name="action_channel_edit">Edit channel</string>
<string name="email_error_domain">Email addresses in %1$s are not allowed!</string>
<string name="report_comment_size">Please, specify the reasons</string>
<string name="not_logged_in">You must be authenticated to proceed to this action!</string>
<string name="successful_report">The account has been reported!</string>
<string name="successful_video_report">The video has been reported!</string>
<string name="password_length_error">The password must contain at least 6 characters!</string>
<string name="muted_done">The account has been muted!</string>
<string name="edit_video">Edit video</string>
<string name="create_an_account">Create an account</string>
<string name="followers_count">%1$s Subscribers</string>
<string name="developer">Developer</string>
<string name="about_vesrion">Release %1$s</string>
<string name="about_the_app">About the app</string>
<string name="Donate">Donate</string>
<string name="source_code">Source code</string>
<string name="issue_tracker">Issue tracker</string>
<string name="action_instance_empty_content">No instances match these criteria</string>
<string name="instances_picker">Instances picker</string>
<string name="pickup_instance">Pickup this instance</string>
<string name="sensitive_video"> Sensitive videos</string>
<string name="sensitive_content">Sensitive content: %1$s</string>
<string name="followers_instance">%1$s followers instances</string>
<string name="help">Help</string>
<string name="pickup_categories">Pickup categories</string>
<string name="pickup_languages">Pickup languages</string>
<string name="notification_channel_name">Update information</string>
<string name="add_account">Add an account</string>
<string name="list_of_accounts">List of accounts</string>
</resources>

View File

@ -1,15 +1,51 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"> <resources xmlns:tools="http://schemas.android.com/tools">
<string name="title_home">Home</string> <string name="set_video_in_list">Videos in list</string>
<string name="title_local">Local</string> <string name="set_video_in_list_description">Change the layout for displaying videos in a list</string>
<string name="no_instances">No instances !</string>
<string name="show_more">Show more</string>
<string name="show_less">Show less</string>
<string name="set_play_screen_lock">Screen lock</string>
<string name="set_play_screen_lock_description">Keep playing videos when the screen is locked</string>
<string name="save">Save</string>
<string name="enable_history">Enable history</string>
<string name="change_profile_picture">Change profile picture</string>
<string name="set_autoplay">Automatic playback</string>
<string name="set_autoplay_description">If enabled, videos will be played automatically</string>
<string name="set_fullscreen">Fullscreen</string>
<string name="set_fullscreen_description">Automatically open videos in fullscreen</string>
<string name="set_autoplay_next_video">Automatically start playing the next video</string>
<string name="set_autoplay_next_video_description">When a video ends, follow up with the next suggested video.</string>
<string name="add_public_reply">Add a public reply</string>
<string name="activity">Activity</string>
<string name="app">App</string>
<string name="notif_new_video">New video from your subscriptions</string>
<string name="notif_new_comment">New comment on your video</string>
<string name="notif_blocked">One of your video is blocked/unblocked</string>
<string name="notif_video_published">Video published (after transcoding/scheduled update)</string>
<string name="notif_video_imported">Video import finished</string>
<string name="notif_new_followers">You or your channel(s) has a new follower</string>
<string name="notif_video_mention">Someone mentioned you in video comments</string>
<string name="notif_abuse_received">An abuse report received a new message</string>
<string name="notif_abuse_accepted">One of your abuse reports has been accepted or rejected by moderators</string>
<plurals name="number_of_replies">
<item quantity="one">%d svar</item>
<item quantity="other">%d svar</item>
</plurals>
<string name="reply">Svara</string>
<string name="set_theme">Tema</string>
<string name="set_theme_description">Allow to change app theme</string>
<string name="federation_issue">The video cannot be federated!</string>
<string name="title_home">Hem</string>
<string name="title_local">Lokal</string>
<string name="title_discover">Discover</string> <string name="title_discover">Discover</string>
<string name="title_notifications">Notifications</string> <string name="title_notifications">Notifiering</string>
<string name="title_recently_added">Recently added</string> <string name="title_recently_added">Nyligen tillagda</string>
<string name="title_trending">Trending</string> <string name="title_trending">Trendar</string>
<string name="title_most_liked">Most liked</string> <string name="title_most_liked">Most liked</string>
<string name="toast_error">Oops! An error occurred!</string> <string name="toast_error">Oops! An error occurred!</string>
<string name="title_muted">Muted</string> <string name="title_muted">Muted</string>
<string name="title_channel">Channels</string> <string name="title_channel">Kanal</string>
<string name="do_not_list">Do not list</string> <string name="do_not_list">Do not list</string>
<string name="blur">Blur</string> <string name="blur">Blur</string>
<string name="display">Display</string> <string name="display">Display</string>
@ -19,95 +55,142 @@
<string name="no_videos">No videos!</string> <string name="no_videos">No videos!</string>
<string name="no_notifications">No notifications!</string> <string name="no_notifications">No notifications!</string>
<string name="favicon">Favicon</string> <string name="favicon">Favicon</string>
<string name="open_with">Open with</string> <string name="open_with">Öppna med</string>
<string name="action_playlist_edit">Edit a playlist</string> <string name="action_playlist_edit">Edit a playlist</string>
<string name="close">Close</string> <string name="close">Stäng</string>
<string name="upload_video">Upload</string> <string name="upload_video">Ladda upp</string>
<string name="image_preview">Image preview</string> <string name="image_preview">Förhandsvisning</string>
<string name="file_to_upload">Select the file to upload</string> <string name="file_to_upload">Välj en fil som ska laddas upp</string>
<string name="channel">Channel</string> <string name="new_video">New video</string>
<string name="videos">Videos</string> <string name="new_blacklist">New blacklist info</string>
<string name="channels">Channels</string> <string name="new_my_video_published">Your video is published</string>
<string name="yes">Yes</string> <string name="new_my_video_error">Error when publishing your video</string>
<string name="no">No</string> <string name="new_comment">New comment</string>
<string name="cancel">Cancel</string> <string name="new_follow">New follow</string>
<string name="download">Download</string> <string name="channel">Kanal</string>
<string name="profile_picture">Profile picture</string> <string name="videos">Videor</string>
<string name="update_video">Update video</string> <string name="channels">Kanal</string>
<string name="refresh_every">Fetch every:</string>
<string-array name="refresh_time">
<item>Never</item>
<item>15 minutes</item>
<item>30 minutes</item>
<item>1 hour</item>
<item>2 hours</item>
<item>6 hours</item>
<item>12 hours</item>
</string-array>
<string name="yes">Ja</string>
<string name="no">Nej</string>
<string name="cancel">Avbryt</string>
<string name="download">Ladda ned</string>
<string name="profile_picture">Profilbild</string>
<string name="update_video">Uppdatera video</string>
<string name="remove_from_playlist">Remove from playlist</string>
<string name="date_seconds">%d s</string> <string name="date_seconds">%d s</string>
<string name="date_minutes">%d m</string> <string name="date_minutes">%d m</string>
<string name="date_hours">%d h</string> <string name="date_hours">%d t</string>
<string name="date_day">%d d</string> <string name="date_day">%d d</string>
<string name="number_view_video">%s views</string> <string name="number_view_video">%s visningar</string>
<string name="title_instance_login">Instance host</string> <string name="title_instance_login">Instance host</string>
<string name="uploading">Uploading, please wait</string> <string name="uploading">Uppladdning pågår, var god vänta</string>
<string name="upload_video_success">The video has been uploaded!</string> <string name="upload_video_success">Videon har laddats upp!</string>
<string name="toast_cancelled">Upload cancelled!</string> <string name="toast_cancelled">Uppladdning avbruten!</string>
<string name="video_uploaded_action">Tap here to edit the video data.</string> <string name="video_uploaded_action">Tap here to edit the video data.</string>
<string name="toot_select_image_error">An error occurred while selecting the media!</string> <string name="toot_select_image_error">Ett fel uppstod när du valde media!</string>
<string name="download_file">Download %1$s</string> <string name="download_file">Laddat ner %1$s</string>
<string name="action_privacy">Privacy</string> <string name="account_updated">The account has been updated!</string>
<string name="action_logout">Logout</string> <string name="action_privacy">Sekretess</string>
<string name="login">Login</string> <string name="action_logout">Logga ut</string>
<string name="password">Password</string> <string name="login">Logga in</string>
<string name="email">Email</string> <string name="password">Lösenord</string>
<string name="tags">Tags</string> <string name="email">E-post</string>
<string name="validate">Validate</string> <string name="tags">Taggar</string>
<string name="share_with">Share with</string> <string name="validate">Bekräfta</string>
<string name="share_with">Dela med</string>
<string name="shared_via">Shared via TubeLab</string> <string name="shared_via">Shared via TubeLab</string>
<string name="username">User name</string> <string name="username">Användarnamn</string>
<string name="settings">Settings</string> <string name="settings">Inställningar</string>
<string name="logout_account_confirmation">Are you sure you want to logout @%1$s@%2$s?</string> <string name="logout_account_confirmation">Är du säker på att du vill logga ut @%1$s@%2$s?</string>
<string name="following">Following</string> <string name="following">Följer</string>
<string name="followers">Followers</string> <string name="followers">Följare</string>
<string name="client_error">Unable to get client id!</string> <string name="client_error">Kan inte få tag på klientid!</string>
<string name="toast_error_loading_account">An error occurred while switching between accounts!</string> <string name="toast_error_loading_account">Ett fel uppstod vid växling mellan konton!</string>
<string name="toast_error_search">An error occurred while searching!</string> <string name="toast_error_search">Ett fel uppstod under sökningen!</string>
<string name="nothing_to_do">No action can be taken</string> <string name="nothing_to_do">Inga åtgärder kan vidtas</string>
<string name="action_follow">Follow</string> <string name="action_follow">Följ</string>
<string name="action_mute">Mute</string> <string name="action_mute">Tysta</string>
<string name="search">Search</string> <string name="search">Sök</string>
<string name="delete">Delete</string> <string name="delete">Ta bort</string>
<string name="action_lists_confirm_delete">Are you sure you want to permanently delete this list?</string> <string name="action_lists_confirm_delete">Är du säker du vill ta bort listan permanent?</string>
<string name="action_lists_delete">Delete list</string> <string name="action_lists_delete">Ta bort lista</string>
<string name="no_comments">Be the first to leave a comment on this video with the top right button!</string> <string name="no_comments">Bli den första att lämna en kommentar på denna video genom knappen längst upp till höger!</string>
<string name="comment_no_allowed_peertube">Comments are not enabled on this video!</string> <string name="comment_no_allowed_peertube">Kommentarer är inte påslaget på denna video!</string>
<string name="pickup_resolution">Pick up a resolution</string> <string name="pickup_resolution">Välj en upplösning</string>
<string name="bookmark_add_peertube">The video has been added to bookmarks!</string> <string name="bookmark_add_peertube">Filmen har lagts till bland bokmärken!</string>
<string name="bookmark_remove_peertube">The video has been removed from bookmarks!</string> <string name="bookmark_remove_peertube">Filmen har tagits bort från bokmärken!</string>
<string name="information" tools:ignore="UnusedResources">Information</string> <string name="information" tools:ignore="UnusedResources">Information</string>
<string name="app_logo">Logo of the application</string> <string name="app_logo">Applikationens logo</string>
<!-- languages not translated --> <!-- languages not translated -->
<string name="subscriptions">Subscriptions</string> <string name="subscriptions">Prenumerationer</string>
<string name="delete_comment">Delete a comment</string> <string name="delete_instance">Delete an instance</string>
<string name="delete_comment_confirm">Are you sure to delete this comment?</string> <string name="delete_instance_confirm">Are you sure to delete this instance?</string>
<string name="set_video_mode">Mode for videos</string> <string name="delete_comment">Ta bort kommentar</string>
<string name="my_videos">My videos</string> <string name="delete_comment_confirm">Är du säker på att ta bort denna kommentar?</string>
<string name="title">Title</string> <string name="set_video_mode">Lägen för video</string>
<string name="license">License</string> <string name="filter">Filter</string>
<string name="category">Category</string> <string name="sepia_search">Sepia search</string>
<string name="language">Language</string> <string name="sepia_element_nsfw">Display sensitive content</string>
<string name="peertube_nsfw">This video contains mature or explicit content</string> <string name="sepia_element_published_date">Published date</string>
<string name="peertube_enable_comments">Enable video comments</string> <string name="any">Any</string>
<string name="description">Description</string> <string name="today">Today</string>
<string name="toast_peertube_video_updated">The video has been updated!</string> <string name="last_7_days">Last 7 days</string>
<string name="last_30_days">Last 30 days</string>
<string name="last_365_days">Last 365 days</string>
<string name="sepia_element_duration">Duration</string>
<string name="duration_short"><![CDATA[Short (<4 min)]]></string>
<string name="duration_medium"><![CDATA[Medium (410 min)]]></string>
<string name="duration_long"><![CDATA[Long (> 10 min)]]></string>
<string name="display_all_categories">Display all categories</string>
<string name="display_all_licenses">Display all licenses</string>
<string name="display_all_languages">Display all languages</string>
<string name="all_of_these_tags">All of these tags</string>
<string name="one_of_these_tags">One of these tags</string>
<string name="apply_filter">Apply filter</string>
<string-array name="sort_by_array">
<item>Best match</item>
<item>Most recent</item>
<item>Least recent</item>
</string-array>
<string name="sort_by">Sort by</string>
<string name="sepia_search_hint">Keyword, channel, video, etc.</string>
<string name="sepia_indication">Sepia Search displays videos and channels that match your search but is not the publisher, nor the owner. If you notice any problems with a video, report it to the administrators on the PeerTube website where the video is published.</string>
<string name="my_videos">Mina videoklipp</string>
<string name="title">Titel</string>
<string name="license">Licens</string>
<string name="category">Kategori</string>
<string name="language">Språk</string>
<string name="peertube_nsfw">Den här videon innehåller moget eller explicit innehåll</string>
<string name="peertube_enable_comments">Tillåt videokommentarer</string>
<string name="description">Beskrivning</string>
<string name="toast_peertube_video_updated">Videon har uppdaterats!</string>
<string name="register_account">Register an account</string> <string name="register_account">Register an account</string>
<string name="email_address">Email address</string> <string name="email_address">Email address</string>
<string name="preview">Preview</string> <string name="preview">Preview</string>
<string name="change_preview">Change preview</string> <string name="change_preview">Change preview</string>
<string name="name">Name</string> <string name="name">Name</string>
<string name="display_more">Display more</string> <string name="display_more">Visa mer</string>
<string name="no_channels">No channels!</string> <string name="no_channels">No channels!</string>
<string name="report_helper">Some explanations about your report…</string> <string name="report_helper">Some explanations about your report…</string>
<string name="report_video">Report video</string> <string name="report_video">Report video</string>
<string name="report">Report</string> <string name="report">Rapportera</string>
<string name="change_instance">Pick another instance</string> <string name="change_instance">Pick another instance</string>
<string name="my_history">History</string> <string name="my_history">Historik</string>
<string name="edit">Edit</string> <string name="edit">Redigera</string>
<string name="video_settings">Video settings</string> <string name="video_settings">Video settings</string>
<string name="app_interface">Interface</string> <string name="app_interface">Gränssnitt</string>
<string name="set_cache_mode">Cache</string> <string name="set_cache_mode">Cache</string>
<string name="set_video_cache_description">Définir le cache pour les vidéos (défaut 100Mo)</string> <string name="set_video_cache_description">Set the cache for videos (default 100Mb)</string>
<string name="set_video_quality_description">Define a default quality for videos</string> <string name="set_video_quality_description">Define a default quality for videos</string>
<string name="set_quality_mode">Resolution for videos</string> <string name="set_quality_mode">Resolution for videos</string>
<string name="video_cache_value">Video cache: %d Mb</string> <string name="video_cache_value">Video cache: %d Mb</string>
@ -115,72 +198,92 @@
<string name="pickup_captions">Pick captions</string> <string name="pickup_captions">Pick captions</string>
<string name="none">None</string> <string name="none">None</string>
<string name="set_video_mode_description">Allows to change mode for playing videos (default, streaming or via a browser).</string> <string name="set_video_mode_description">Allows to change mode for playing videos (default, streaming or via a browser).</string>
<string name="delete_video">Delete video</string> <string name="delete_account_comment">Delete account comments</string>
<string name="delete_video_confirmation">Are you sure to delete this video?</string> <string name="delete_account_comment_confirm">Are you sure you want to remove all the comments of this account?</string>
<string name="no_video_to_display">No videos to display!</string> <string name="delete_video">Ta bort film</string>
<string name="share">Share</string> <string name="delete_video_confirmation">Är du säker på att ta bort denna film?</string>
<string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> commented your video <b>%2$s</b>]]></string> <string name="no_video_to_display">Inga filmer att visa!</string>
<string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> is following your channel <b>%2$s</b>]]></string> <string name="share">Dela</string>
<string name="peertube_follow_account"><![CDATA[<b>%1$s</b> is following your account]]></string> <string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> kommenterade din video <b>%2$s</b>]]></string>
<string name="peertube_video_published"><![CDATA[Your video <b>%1$s</b> has been published]]></string> <string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> följer din kanal <b>%2$s</b>]]></string>
<string name="peertube_video_import_success"><![CDATA[Your video import <b>%1$s</b> succeeded]]></string> <string name="peertube_follow_account"><![CDATA[<b>%1$s</b> följer ditt konto]]></string>
<string name="peertube_video_import_error"><![CDATA[Your video import <b>%1$s</b> failed]]></string> <string name="peertube_video_published"><![CDATA[Din video <b>%1$s</b> har publicerats]]></string>
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> published a new video: <b>%2$s</b>]]></string> <string name="peertube_video_import_success"><![CDATA[Importen av din video, <b>%1$s</b>, lyckades]]></string>
<string name="peertube_video_blacklist"><![CDATA[Your video <b>%1$s</b> has been blacklisted]]></string> <string name="peertube_video_import_error"><![CDATA[Importen av din video, <b>%1$s</b>, misslyckades]]></string>
<string name="peertube_video_unblacklist"><![CDATA[Your video <b>%1$s</b> has been unblacklisted]]></string> <string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> publicerade en ny video: <b>%2$s</b>]]></string>
<string name="peertube_video_blacklist"><![CDATA[Din video <b>%1$s</b> har svartlistats]]></string>
<string name="peertube_video_unblacklist"><![CDATA[Svartlistningen av din video, <b>%1$s</b>, har tagits bort]]></string>
<string name="peertube_video_report_success"><![CDATA[Your abuse report <b>%1$s</b> has been accepted]]></string>
<string name="peertube_video_abuse"><![CDATA[New abuse report for video: <b>%1$s</b>]]></string> <string name="peertube_video_abuse"><![CDATA[New abuse report for video: <b>%1$s</b>]]></string>
<string name="add_public_comment">Add a public comment</string> <string name="add_public_comment">Lägg till en publik kommentar</string>
<string name="send_comment">Send comment</string> <string name="send_comment">Skicka kommentar</string>
<string name="all">All</string> <string name="all">Allt</string>
<!-- end languages --> <!-- end languages -->
<string name="playlists">Playlists</string> <string name="delete_history">Delete videos history</string>
<string name="display_name">Display name</string> <string name="delete_history_confirm">Are you sure you want to delete all your videos history?</string>
<string name="export_list">Export</string>
<string name="import_list">Import</string>
<string name="export_notification_title">Successful export!</string>
<string name="export_notification_content">Tap here to send the export by email</string>
<string name="export_notification_subjet">New Playlist</string>
<string name="export_notification_body">Open the attached file with TubeLab</string>
<string name="playlists">Spellistor</string>
<string name="no_playlist">No playlists</string>
<string name="display_name">Visningsnamn</string>
<string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string> <string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string>
<string name="error_display_name">You must provide a display name!</string> <string name="error_display_name">Du måste ange ett visningsnamn!</string>
<string name="error_channel_mandatory">The channel is required when the playlist is public.</string> <string name="error_channel_mandatory">Kanalen krävs när spellistan är offentliga.</string>
<string name="action_playlist_create">Create a playlist</string> <string name="action_playlist_create">Skapa spellista</string>
<string name="action_playlist_empty_content">There is nothing in this playlist yet.</string> <string name="action_playlist_empty_content">Det finns ingenting i denna spellista ännu.</string>
<string name="password_confirm">Confirm password</string> <string name="password_confirm">Bekräfta lösenord</string>
<string name="agreement_check">I agree to %1$s and %2$s</string> <string name="agreement_check">Jag godkänner %1$s och %2$s</string>
<string name="server_rules">server rules</string> <string name="server_rules">serverregler</string>
<string name="tos">terms of service</string> <string name="tos">tjänstevillkor</string>
<string name="sign_up">Sign up</string> <string name="sign_up">Registrera dig</string>
<string name="all_field_filled">Please, fill all the fields!</string> <string name="all_field_filled">Vänligen fyll i alla fält!</string>
<string name="password_error">Passwords don\'t match!</string> <string name="password_error">Lösenorden matchar inte!</string>
<string name="email_error">The email doesn\'t seem to be valid!</string> <string name="email_error">E-posten verkar inte vara giltig!</string>
<string name="email_indicator">You will be sent a confirmation e-mail</string> <string name="email_indicator">Du kommer att få en bekräftelse via e-post</string>
<string name="password_indicator">Use at least 8 characters</string> <string name="password_indicator">Använda minst åtta (8) tecken</string>
<string name="password_too_short">Password should contain at least 8 characters</string> <string name="password_too_short">Lösenordet måste innehålla minst åtta (8) tecken</string>
<string name="username_error">Username should only contain letters, numbers and underscores</string> <string name="username_error">Användarnamn får endast innehålla bokstäver, siffror och understreck</string>
<string name="account_created">Account created!</string> <string name="account_created">Konto skapat!</string>
<string name="account_created_message"> Your account has been created!\n\n <string name="account_created_message"> Your account has been created!\n\n
Think to validate your email within the 48 next hours.\n\n Think to validate your email within the 48 next hours.\n\n
You can now connect your account by writing <b>%1$s</b> in the first field and tap on <b>Connect</b>.\n\n You can now connect your account by writing <b>%1$s</b> in the first field and tap on <b>Connect</b>.\n\n
<b>Important</b>: If your instance required validation, you will receive an email once it is validated! <b>Important</b>: If your instance required validation, you will receive an email once it is validated!
</string> </string>
<string name="account">Account</string> <string name="account">Konto</string>
<string name="report_account">Report account</string> <string name="report_account">Rapportera konto</string>
<string-array name="settings_video_mode"> <string-array name="settings_video_mode">
<item>Webview</item> <item>Nomal</item>
<item>Direct stream</item> <item>Webbvy</item>
<item>Magnet</item>
<item>Torrent</item>
</string-array>
<string-array name="settings_theme">
<item>Ljust</item>
<item>Mörkt</item>
<item>Automatic</item>
</string-array> </string-array>
<string-array name="settings_video_quality"> <string-array name="settings_video_quality">
<item>High</item> <item>High</item>
<item>Medium</item> <item>Medium</item>
<item>Low</item> <item>Low</item>
</string-array> </string-array>
<string name="unfollow_confirm">Do you want to unfollow this account?</string> <string name="unfollow_confirm">Vill du sluta följa detta konto?</string>
<string name="title_video_peertube">Title for the video</string> <string name="title_video_peertube">Titel på videon</string>
<string name="join_peertube">Join Peertube</string> <string name="join_peertube">Gå med i Peertube</string>
<string name="agreement_check_peertube">I am at least 16 years old and agree to the %1$s of this instance</string> <string name="agreement_check_peertube">Jag är minst 16 år gammal och godkänner %1$s för denna instans</string>
<string name="edit_profile">Edit profile</string> <string name="edit_profile">Ändra profil</string>
<string name="make_an_action">Make an action</string> <string name="make_an_action">Gör en handling</string>
<string name="action_unfollow">Unfollow</string> <string name="action_unfollow">Sluta följa</string>
<string name="display_nsfw_videos">Display sensitive videos</string> <string name="display_nsfw_videos">Display sensitive videos</string>
<string name="fullscreen">Fullscreen</string> <string name="fullscreen">Fullscreen</string>
<string name="bookmark_peertube_empty">There are no videos in your favourites!</string> <string name="bookmark_peertube_empty">There are no videos in your favourites!</string>
<string name="delete_channel">Remove channel</string> <string name="delete_channel">Remove channel</string>
<string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string> <string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string>
<string name="modify_playlists">Video in playlists</string>
<string name="no_muted">No muted accounts!</string> <string name="no_muted">No muted accounts!</string>
<string name="error_display_name_channel">You must define a name and a display name for this channel!</string> <string name="error_display_name_channel">You must define a name and a display name for this channel!</string>
<string name="action_channel_create">Create a channel</string> <string name="action_channel_create">Create a channel</string>
@ -196,12 +299,12 @@
<string name="edit_video">Edit video</string> <string name="edit_video">Edit video</string>
<string name="create_an_account">Create an account</string> <string name="create_an_account">Create an account</string>
<string name="followers_count">%1$s Subscribers</string> <string name="followers_count">%1$s Subscribers</string>
<string name="developer">Developer</string> <string name="developer">Utvecklare</string>
<string name="about_vesrion">Release %1$s</string> <string name="about_vesrion">Släpp %1$s</string>
<string name="about_the_app">About the app</string> <string name="about_the_app">Om appen</string>
<string name="Donate">Donate</string> <string name="Donate">Donera</string>
<string name="source_code">Source code</string> <string name="source_code">Källkod</string>
<string name="issue_tracker">Issue tracker</string> <string name="issue_tracker">Ärendespårare</string>
<string name="action_instance_empty_content">No instances match these criteria</string> <string name="action_instance_empty_content">No instances match these criteria</string>
<string name="instances_picker">Instances picker</string> <string name="instances_picker">Instances picker</string>
<string name="pickup_instance">Pick this instance</string> <string name="pickup_instance">Pick this instance</string>
@ -212,7 +315,8 @@
<string name="pickup_categories">Pick categories</string> <string name="pickup_categories">Pick categories</string>
<string name="pickup_languages">Pick languages</string> <string name="pickup_languages">Pick languages</string>
<string name="notification_channel_name">Update information</string> <string name="notification_channel_name">Update information</string>
<string name="add_account">Add an account</string> <string name="fetch_notification_channel_name">Fetch notifications</string>
<string name="add_account">Lägg till ett konto</string>
<string name="list_of_accounts">List of accounts</string> <string name="list_of_accounts">List of accounts</string>
<string name="pause">Pause</string> <string name="pause">Pause</string>
<string name="play">Play</string> <string name="play">Play</string>

View File

@ -1,198 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="title_home">Home</string>
<string name="title_discover">Discover</string>
<string name="title_notifications">Notifications</string>
<string name="title_recently_added">Recently added</string>
<string name="title_trending">Trending</string>
<string name="title_most_liked">Most liked</string>
<string name="toast_error">Oops! An error occurred!</string>
<string name="title_muted">Muted</string>
<string name="title_channel">Channels</string>
<string name="do_not_list">Do not list</string>
<string name="blur">Blur</string>
<string name="display">Display</string>
<string name="no_opinion">No opinion</string>
<string name="instance_choice">Pickup an instance</string>
<string name="not_valide_instance">This instance does not seem to be valid!</string>
<string name="no_videos">No videos!</string>
<string name="favicon">Favicon</string>
<string name="open_with">Open with</string>
<string name="action_playlist_edit">Edit a playlist</string>
<string name="close">Close</string>
<string name="upload_video">Upload</string>
<string name="image_preview">Image preview</string>
<string name="file_to_upload">Select the file to upload</string>
<string name="channel">Channel</string>
<string name="videos">Videos</string>
<string name="channels">Channels</string>
<string name="yes">Yes</string>
<string name="no">No</string>
<string name="cancel">Cancel</string>
<string name="download">Download</string>
<string name="profile_picture">Profile picture</string>
<string name="update_video">Update video</string>
<string name="date_seconds">%d s</string>
<string name="date_minutes">%d m</string>
<string name="date_hours">%d h</string>
<string name="date_day">%d d</string>
<string name="number_view_video">%s views</string>
<string name="title_instance_login">Instance host</string>
<string name="uploading">Uploading, please wait…</string>
<string name="upload_video_success">The video has been uploaded!</string>
<string name="toast_cancelled">Upload cancelled!</string>
<string name="video_uploaded_action">Tap here to edit the video data.</string>
<string name="toot_select_image_error">An error occurred while selecting the media!</string>
<string name="download_file">Download %1$s</string>
<string name="action_privacy">Privacy</string>
<string name="action_logout">Logout</string>
<string name="login">Login</string>
<string name="password">Password</string>
<string name="email">Email</string>
<string name="tags">Tags</string>
<string name="validate">Validate</string>
<string name="share_with">Share with</string>
<string name="shared_via">Shared via TubeLab</string>
<string name="username">User name</string>
<string name="settings">Settings</string>
<string name="logout_account_confirmation">Are you sure you want to logout @%1$s@%2$s?</string>
<string name="following">Following</string>
<string name="followers">Followers</string>
<string name="client_error">Unable to get client id!</string>
<string name="toast_error_loading_account">An error occurred while switching between accounts!</string>
<string name="toast_error_search">An error occurred while searching!</string>
<string name="nothing_to_do">No action can be taken</string>
<string name="action_follow">Follow</string>
<string name="action_mute">Mute</string>
<string name="search">Search</string>
<string name="delete">Delete</string>
<string name="action_lists_confirm_delete">Are you sure you want to permanently delete this list?</string>
<string name="action_lists_delete">Delete list</string>
<string name="no_comments">Be the first to leave a comment on this video with the top right button!</string>
<string name="comment_no_allowed_peertube">Comments are not enabled on this video!</string>
<string name="pickup_resolution">Pick up a resolution</string>
<string name="bookmark_add_peertube">The video has been added to bookmarks!</string>
<string name="bookmark_remove_peertube">The video has been removed from bookmarks!</string>
<string name="information" tools:ignore="UnusedResources">Information</string>
<string name="app_logo">Logo of the application</string>
<!-- languages not translated -->
<string name="subscriptions">Subscriptions</string>
<string name="delete_comment">Delete a comment</string>
<string name="delete_comment_confirm">Are you sure to delete this comment?</string>
<string name="set_video_mode">Mode for videos</string>
<string name="my_videos">My videos</string>
<string name="title">Title</string>
<string name="license">License</string>
<string name="category">Category</string>
<string name="language">Language</string>
<string name="peertube_nsfw">This video contains mature or explicit content</string>
<string name="peertube_enable_comments">Enable video comments</string>
<string name="description">Description</string>
<string name="toast_peertube_video_updated">The video has been updated!</string>
<string name="register_account">Register an account</string>
<string name="email_address">Email address</string>
<string name="preview">Preview</string>
<string name="change_preview">Change preview</string>
<string name="name">Name</string>
<string name="display_more">Display more</string>
<string name="no_channels">No channels!</string>
<string name="report_helper">Some explanations about your report…</string>
<string name="report_video">Report video</string>
<string name="report">Report</string>
<string name="change_instance">Pickup another instance</string>
<string name="my_history">History</string>
<string name="edit">Edit</string>
<string name="set_video_mode_description">Allows to change mode for playing videos (default, streaming or via a browser).</string>
<string name="delete_video">Delete video</string>
<string name="delete_video_confirmation">Are you sure to delete this video?</string>
<string name="no_video_to_display">No videos to display!</string>
<string name="share">Share</string>
<string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> commented your video <b>%2$s</b>]]></string>
<string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> is following your channel <b>%2$s</b>]]></string>
<string name="peertube_follow_account"><![CDATA[<b>%1$s</b> is following your account]]></string>
<string name="peertube_video_published"><![CDATA[Your video <b>%1$s</b> has been published]]></string>
<string name="peertube_video_import_success"><![CDATA[Your video import <b>%1$s</b> succeeded]]></string>
<string name="peertube_video_import_error"><![CDATA[Your video import <b>%1$s</b> failed]]></string>
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> published a new video: <b>%2$s</b>]]></string>
<string name="peertube_video_blacklist"><![CDATA[Your video <b>%1$s</b> has been blacklisted]]></string>
<string name="peertube_video_unblacklist"><![CDATA[Your video <b>%1$s</b> has been unblacklisted]]></string>
<string name="add_public_comment">Add a public comment</string>
<string name="send_comment">Send comment</string>
<string name="all">All</string>
<!-- end languages -->
<string name="playlists">Playlists</string>
<string name="display_name">Display name</string>
<string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string>
<string name="error_display_name">You must provide a display name!</string>
<string name="error_channel_mandatory">The channel is required when the playlist is public.</string>
<string name="action_playlist_create">Create a playlist</string>
<string name="action_playlist_empty_content">There is nothing in this playlist yet.</string>
<string name="password_confirm">Confirm password</string>
<string name="agreement_check">I agree to %1$s and %2$s</string>
<string name="server_rules">server rules</string>
<string name="tos">terms of service</string>
<string name="sign_up">Sign up</string>
<string name="all_field_filled">Please, fill all the fields!</string>
<string name="password_error">Passwords don\'t match!</string>
<string name="email_error">The email doesn\'t seem to be valid!</string>
<string name="email_indicator">You will be sent a confirmation e-mail</string>
<string name="password_indicator">Use at least 8 characters</string>
<string name="password_too_short">Password should contain at least 8 characters</string>
<string name="username_error">Username should only contain letters, numbers and underscores</string>
<string name="account_created">Account created!</string>
<string name="account_created_message"> Your account has been created!\n\n
Think to validate your email within the 48 next hours.\n\n
You can now connect your account by writing <b>%1$s</b> in the first field and tap on <b>Connect</b>.\n\n
<b>Important</b>: If your instance required validation, you will receive an email once it is validated!
</string>
<string name="account">Account</string>
<string name="report_account">Report account</string>
<string-array name="settings_video_mode">
<item>Webview</item>
<item>Direct stream</item>
</string-array>
<string name="unfollow_confirm">Do you want to unfollow this account?</string>
<string name="title_video_peertube">Title for the video</string>
<string name="join_peertube">Join Peertube</string>
<string name="agreement_check_peertube">I am at least 16 years old and agree to the %1$s of this instance</string>
<string name="edit_profile">Edit profile</string>
<string name="make_an_action">Make an action</string>
<string name="action_unfollow">Unfollow</string>
<string name="display_nsfw_videos">Display sensitive videos</string>
<string name="fullscreen">Fullscreen</string>
<string name="bookmark_peertube_empty">There are no videos in your favourites!</string>
<string name="delete_channel">Remove channel</string>
<string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string>
<string name="no_muted">No muted accounts!</string>
<string name="error_display_name_channel">You must define a name and a display name for this channel!</string>
<string name="action_channel_create">Create a channel</string>
<string name="action_channel_edit">Edit channel</string>
<string name="email_error_domain">Email addresses in %1$s are not allowed!</string>
<string name="report_comment_size">Please, specify the reasons</string>
<string name="not_logged_in">You must be authenticated to proceed to this action!</string>
<string name="successful_report">The account has been reported!</string>
<string name="successful_video_report">The video has been reported!</string>
<string name="password_length_error">The password must contain at least 6 characters!</string>
<string name="muted_done">The account has been muted!</string>
<string name="edit_video">Edit video</string>
<string name="create_an_account">Create an account</string>
<string name="followers_count">%1$s Subscribers</string>
<string name="developer">Developer</string>
<string name="about_vesrion">Release %1$s</string>
<string name="about_the_app">About the app</string>
<string name="Donate">Donate</string>
<string name="source_code">Source code</string>
<string name="issue_tracker">Issue tracker</string>
<string name="action_instance_empty_content">No instances match these criteria</string>
<string name="instances_picker">Instances picker</string>
<string name="pickup_instance">Pickup this instance</string>
<string name="sensitive_video"> Sensitive videos</string>
<string name="sensitive_content">Sensitive content: %1$s</string>
<string name="followers_instance">%1$s followers instances</string>
<string name="help">Help</string>
<string name="pickup_categories">Pickup categories</string>
<string name="pickup_languages">Pickup languages</string>
<string name="notification_channel_name">Update information</string>
<string name="add_account">Add an account</string>
<string name="list_of_accounts">List of accounts</string>
</resources>

View File

@ -1,198 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="title_home">Home</string>
<string name="title_discover">Discover</string>
<string name="title_notifications">Notifications</string>
<string name="title_recently_added">Recently added</string>
<string name="title_trending">Trending</string>
<string name="title_most_liked">Most liked</string>
<string name="toast_error">Oops! An error occurred!</string>
<string name="title_muted">Muted</string>
<string name="title_channel">Channels</string>
<string name="do_not_list">Do not list</string>
<string name="blur">Blur</string>
<string name="display">Display</string>
<string name="no_opinion">No opinion</string>
<string name="instance_choice">Pickup an instance</string>
<string name="not_valide_instance">This instance does not seem to be valid!</string>
<string name="no_videos">No videos!</string>
<string name="favicon">Favicon</string>
<string name="open_with">Open with</string>
<string name="action_playlist_edit">Edit a playlist</string>
<string name="close">Close</string>
<string name="upload_video">Upload</string>
<string name="image_preview">Image preview</string>
<string name="file_to_upload">Select the file to upload</string>
<string name="channel">Channel</string>
<string name="videos">Videos</string>
<string name="channels">Channels</string>
<string name="yes">Yes</string>
<string name="no">No</string>
<string name="cancel">Cancel</string>
<string name="download">Download</string>
<string name="profile_picture">Profile picture</string>
<string name="update_video">Update video</string>
<string name="date_seconds">%d s</string>
<string name="date_minutes">%d m</string>
<string name="date_hours">%d h</string>
<string name="date_day">%d d</string>
<string name="number_view_video">%s views</string>
<string name="title_instance_login">Instance host</string>
<string name="uploading">Uploading, please wait…</string>
<string name="upload_video_success">The video has been uploaded!</string>
<string name="toast_cancelled">Upload cancelled!</string>
<string name="video_uploaded_action">Tap here to edit the video data.</string>
<string name="toot_select_image_error">An error occurred while selecting the media!</string>
<string name="download_file">Download %1$s</string>
<string name="action_privacy">Privacy</string>
<string name="action_logout">Logout</string>
<string name="login">Login</string>
<string name="password">Password</string>
<string name="email">Email</string>
<string name="tags">Tags</string>
<string name="validate">Validate</string>
<string name="share_with">Share with</string>
<string name="shared_via">Shared via TubeLab</string>
<string name="username">User name</string>
<string name="settings">Settings</string>
<string name="logout_account_confirmation">Are you sure you want to logout @%1$s@%2$s?</string>
<string name="following">Following</string>
<string name="followers">Followers</string>
<string name="client_error">Unable to get client id!</string>
<string name="toast_error_loading_account">An error occurred while switching between accounts!</string>
<string name="toast_error_search">An error occurred while searching!</string>
<string name="nothing_to_do">No action can be taken</string>
<string name="action_follow">Follow</string>
<string name="action_mute">Mute</string>
<string name="search">Search</string>
<string name="delete">Delete</string>
<string name="action_lists_confirm_delete">Are you sure you want to permanently delete this list?</string>
<string name="action_lists_delete">Delete list</string>
<string name="no_comments">Be the first to leave a comment on this video with the top right button!</string>
<string name="comment_no_allowed_peertube">Comments are not enabled on this video!</string>
<string name="pickup_resolution">Pick up a resolution</string>
<string name="bookmark_add_peertube">The video has been added to bookmarks!</string>
<string name="bookmark_remove_peertube">The video has been removed from bookmarks!</string>
<string name="information" tools:ignore="UnusedResources">Information</string>
<string name="app_logo">Logo of the application</string>
<!-- languages not translated -->
<string name="subscriptions">Subscriptions</string>
<string name="delete_comment">Delete a comment</string>
<string name="delete_comment_confirm">Are you sure to delete this comment?</string>
<string name="set_video_mode">Mode for videos</string>
<string name="my_videos">My videos</string>
<string name="title">Title</string>
<string name="license">License</string>
<string name="category">Category</string>
<string name="language">Language</string>
<string name="peertube_nsfw">This video contains mature or explicit content</string>
<string name="peertube_enable_comments">Enable video comments</string>
<string name="description">Description</string>
<string name="toast_peertube_video_updated">The video has been updated!</string>
<string name="register_account">Register an account</string>
<string name="email_address">Email address</string>
<string name="preview">Preview</string>
<string name="change_preview">Change preview</string>
<string name="name">Name</string>
<string name="display_more">Display more</string>
<string name="no_channels">No channels!</string>
<string name="report_helper">Some explanations about your report…</string>
<string name="report_video">Report video</string>
<string name="report">Report</string>
<string name="change_instance">Pickup another instance</string>
<string name="my_history">History</string>
<string name="edit">Edit</string>
<string name="set_video_mode_description">Allows to change mode for playing videos (default, streaming or via a browser).</string>
<string name="delete_video">Delete video</string>
<string name="delete_video_confirmation">Are you sure to delete this video?</string>
<string name="no_video_to_display">No videos to display!</string>
<string name="share">Share</string>
<string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> commented your video <b>%2$s</b>]]></string>
<string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> is following your channel <b>%2$s</b>]]></string>
<string name="peertube_follow_account"><![CDATA[<b>%1$s</b> is following your account]]></string>
<string name="peertube_video_published"><![CDATA[Your video <b>%1$s</b> has been published]]></string>
<string name="peertube_video_import_success"><![CDATA[Your video import <b>%1$s</b> succeeded]]></string>
<string name="peertube_video_import_error"><![CDATA[Your video import <b>%1$s</b> failed]]></string>
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> published a new video: <b>%2$s</b>]]></string>
<string name="peertube_video_blacklist"><![CDATA[Your video <b>%1$s</b> has been blacklisted]]></string>
<string name="peertube_video_unblacklist"><![CDATA[Your video <b>%1$s</b> has been unblacklisted]]></string>
<string name="add_public_comment">Add a public comment</string>
<string name="send_comment">Send comment</string>
<string name="all">All</string>
<!-- end languages -->
<string name="playlists">Playlists</string>
<string name="display_name">Display name</string>
<string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string>
<string name="error_display_name">You must provide a display name!</string>
<string name="error_channel_mandatory">The channel is required when the playlist is public.</string>
<string name="action_playlist_create">Create a playlist</string>
<string name="action_playlist_empty_content">There is nothing in this playlist yet.</string>
<string name="password_confirm">Confirm password</string>
<string name="agreement_check">I agree to %1$s and %2$s</string>
<string name="server_rules">server rules</string>
<string name="tos">terms of service</string>
<string name="sign_up">Sign up</string>
<string name="all_field_filled">Please, fill all the fields!</string>
<string name="password_error">Passwords don\'t match!</string>
<string name="email_error">The email doesn\'t seem to be valid!</string>
<string name="email_indicator">You will be sent a confirmation e-mail</string>
<string name="password_indicator">Use at least 8 characters</string>
<string name="password_too_short">Password should contain at least 8 characters</string>
<string name="username_error">Username should only contain letters, numbers and underscores</string>
<string name="account_created">Account created!</string>
<string name="account_created_message"> Your account has been created!\n\n
Think to validate your email within the 48 next hours.\n\n
You can now connect your account by writing <b>%1$s</b> in the first field and tap on <b>Connect</b>.\n\n
<b>Important</b>: If your instance required validation, you will receive an email once it is validated!
</string>
<string name="account">Account</string>
<string name="report_account">Report account</string>
<string-array name="settings_video_mode">
<item>Webview</item>
<item>Direct stream</item>
</string-array>
<string name="unfollow_confirm">Do you want to unfollow this account?</string>
<string name="title_video_peertube">Title for the video</string>
<string name="join_peertube">Join Peertube</string>
<string name="agreement_check_peertube">I am at least 16 years old and agree to the %1$s of this instance</string>
<string name="edit_profile">Edit profile</string>
<string name="make_an_action">Make an action</string>
<string name="action_unfollow">Unfollow</string>
<string name="display_nsfw_videos">Display sensitive videos</string>
<string name="fullscreen">Fullscreen</string>
<string name="bookmark_peertube_empty">There are no videos in your favourites!</string>
<string name="delete_channel">Remove channel</string>
<string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string>
<string name="no_muted">No muted accounts!</string>
<string name="error_display_name_channel">You must define a name and a display name for this channel!</string>
<string name="action_channel_create">Create a channel</string>
<string name="action_channel_edit">Edit channel</string>
<string name="email_error_domain">Email addresses in %1$s are not allowed!</string>
<string name="report_comment_size">Please, specify the reasons</string>
<string name="not_logged_in">You must be authenticated to proceed to this action!</string>
<string name="successful_report">The account has been reported!</string>
<string name="successful_video_report">The video has been reported!</string>
<string name="password_length_error">The password must contain at least 6 characters!</string>
<string name="muted_done">The account has been muted!</string>
<string name="edit_video">Edit video</string>
<string name="create_an_account">Create an account</string>
<string name="followers_count">%1$s Subscribers</string>
<string name="developer">Developer</string>
<string name="about_vesrion">Release %1$s</string>
<string name="about_the_app">About the app</string>
<string name="Donate">Donate</string>
<string name="source_code">Source code</string>
<string name="issue_tracker">Issue tracker</string>
<string name="action_instance_empty_content">No instances match these criteria</string>
<string name="instances_picker">Instances picker</string>
<string name="pickup_instance">Pickup this instance</string>
<string name="sensitive_video"> Sensitive videos</string>
<string name="sensitive_content">Sensitive content: %1$s</string>
<string name="followers_instance">%1$s followers instances</string>
<string name="help">Help</string>
<string name="pickup_categories">Pickup categories</string>
<string name="pickup_languages">Pickup languages</string>
<string name="notification_channel_name">Update information</string>
<string name="add_account">Add an account</string>
<string name="list_of_accounts">List of accounts</string>
</resources>

View File

@ -1,198 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="title_home">Home</string>
<string name="title_discover">Discover</string>
<string name="title_notifications">Notifications</string>
<string name="title_recently_added">Recently added</string>
<string name="title_trending">Trending</string>
<string name="title_most_liked">Most liked</string>
<string name="toast_error">Oops! An error occurred!</string>
<string name="title_muted">Muted</string>
<string name="title_channel">Channels</string>
<string name="do_not_list">Do not list</string>
<string name="blur">Blur</string>
<string name="display">Display</string>
<string name="no_opinion">No opinion</string>
<string name="instance_choice">Pickup an instance</string>
<string name="not_valide_instance">This instance does not seem to be valid!</string>
<string name="no_videos">No videos!</string>
<string name="favicon">Favicon</string>
<string name="open_with">Open with</string>
<string name="action_playlist_edit">Edit a playlist</string>
<string name="close">Close</string>
<string name="upload_video">Upload</string>
<string name="image_preview">Image preview</string>
<string name="file_to_upload">Select the file to upload</string>
<string name="channel">Channel</string>
<string name="videos">Videos</string>
<string name="channels">Channels</string>
<string name="yes">Yes</string>
<string name="no">No</string>
<string name="cancel">Cancel</string>
<string name="download">Download</string>
<string name="profile_picture">Profile picture</string>
<string name="update_video">Update video</string>
<string name="date_seconds">%d s</string>
<string name="date_minutes">%d m</string>
<string name="date_hours">%d h</string>
<string name="date_day">%d d</string>
<string name="number_view_video">%s views</string>
<string name="title_instance_login">Instance host</string>
<string name="uploading">Uploading, please wait…</string>
<string name="upload_video_success">The video has been uploaded!</string>
<string name="toast_cancelled">Upload cancelled!</string>
<string name="video_uploaded_action">Tap here to edit the video data.</string>
<string name="toot_select_image_error">An error occurred while selecting the media!</string>
<string name="download_file">Download %1$s</string>
<string name="action_privacy">Privacy</string>
<string name="action_logout">Logout</string>
<string name="login">Login</string>
<string name="password">Password</string>
<string name="email">Email</string>
<string name="tags">Tags</string>
<string name="validate">Validate</string>
<string name="share_with">Share with</string>
<string name="shared_via">Shared via TubeLab</string>
<string name="username">User name</string>
<string name="settings">Settings</string>
<string name="logout_account_confirmation">Are you sure you want to logout @%1$s@%2$s?</string>
<string name="following">Following</string>
<string name="followers">Followers</string>
<string name="client_error">Unable to get client id!</string>
<string name="toast_error_loading_account">An error occurred while switching between accounts!</string>
<string name="toast_error_search">An error occurred while searching!</string>
<string name="nothing_to_do">No action can be taken</string>
<string name="action_follow">Follow</string>
<string name="action_mute">Mute</string>
<string name="search">Search</string>
<string name="delete">Delete</string>
<string name="action_lists_confirm_delete">Are you sure you want to permanently delete this list?</string>
<string name="action_lists_delete">Delete list</string>
<string name="no_comments">Be the first to leave a comment on this video with the top right button!</string>
<string name="comment_no_allowed_peertube">Comments are not enabled on this video!</string>
<string name="pickup_resolution">Pick up a resolution</string>
<string name="bookmark_add_peertube">The video has been added to bookmarks!</string>
<string name="bookmark_remove_peertube">The video has been removed from bookmarks!</string>
<string name="information" tools:ignore="UnusedResources">Information</string>
<string name="app_logo">Logo of the application</string>
<!-- languages not translated -->
<string name="subscriptions">Subscriptions</string>
<string name="delete_comment">Delete a comment</string>
<string name="delete_comment_confirm">Are you sure to delete this comment?</string>
<string name="set_video_mode">Mode for videos</string>
<string name="my_videos">My videos</string>
<string name="title">Title</string>
<string name="license">License</string>
<string name="category">Category</string>
<string name="language">Language</string>
<string name="peertube_nsfw">This video contains mature or explicit content</string>
<string name="peertube_enable_comments">Enable video comments</string>
<string name="description">Description</string>
<string name="toast_peertube_video_updated">The video has been updated!</string>
<string name="register_account">Register an account</string>
<string name="email_address">Email address</string>
<string name="preview">Preview</string>
<string name="change_preview">Change preview</string>
<string name="name">Name</string>
<string name="display_more">Display more</string>
<string name="no_channels">No channels!</string>
<string name="report_helper">Some explanations about your report…</string>
<string name="report_video">Report video</string>
<string name="report">Report</string>
<string name="change_instance">Pickup another instance</string>
<string name="my_history">History</string>
<string name="edit">Edit</string>
<string name="set_video_mode_description">Allows to change mode for playing videos (default, streaming or via a browser).</string>
<string name="delete_video">Delete video</string>
<string name="delete_video_confirmation">Are you sure to delete this video?</string>
<string name="no_video_to_display">No videos to display!</string>
<string name="share">Share</string>
<string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> commented your video <b>%2$s</b>]]></string>
<string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> is following your channel <b>%2$s</b>]]></string>
<string name="peertube_follow_account"><![CDATA[<b>%1$s</b> is following your account]]></string>
<string name="peertube_video_published"><![CDATA[Your video <b>%1$s</b> has been published]]></string>
<string name="peertube_video_import_success"><![CDATA[Your video import <b>%1$s</b> succeeded]]></string>
<string name="peertube_video_import_error"><![CDATA[Your video import <b>%1$s</b> failed]]></string>
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> published a new video: <b>%2$s</b>]]></string>
<string name="peertube_video_blacklist"><![CDATA[Your video <b>%1$s</b> has been blacklisted]]></string>
<string name="peertube_video_unblacklist"><![CDATA[Your video <b>%1$s</b> has been unblacklisted]]></string>
<string name="add_public_comment">Add a public comment</string>
<string name="send_comment">Send comment</string>
<string name="all">All</string>
<!-- end languages -->
<string name="playlists">Playlists</string>
<string name="display_name">Display name</string>
<string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string>
<string name="error_display_name">You must provide a display name!</string>
<string name="error_channel_mandatory">The channel is required when the playlist is public.</string>
<string name="action_playlist_create">Create a playlist</string>
<string name="action_playlist_empty_content">There is nothing in this playlist yet.</string>
<string name="password_confirm">Confirm password</string>
<string name="agreement_check">I agree to %1$s and %2$s</string>
<string name="server_rules">server rules</string>
<string name="tos">terms of service</string>
<string name="sign_up">Sign up</string>
<string name="all_field_filled">Please, fill all the fields!</string>
<string name="password_error">Passwords don\'t match!</string>
<string name="email_error">The email doesn\'t seem to be valid!</string>
<string name="email_indicator">You will be sent a confirmation e-mail</string>
<string name="password_indicator">Use at least 8 characters</string>
<string name="password_too_short">Password should contain at least 8 characters</string>
<string name="username_error">Username should only contain letters, numbers and underscores</string>
<string name="account_created">Account created!</string>
<string name="account_created_message"> Your account has been created!\n\n
Think to validate your email within the 48 next hours.\n\n
You can now connect your account by writing <b>%1$s</b> in the first field and tap on <b>Connect</b>.\n\n
<b>Important</b>: If your instance required validation, you will receive an email once it is validated!
</string>
<string name="account">Account</string>
<string name="report_account">Report account</string>
<string-array name="settings_video_mode">
<item>Webview</item>
<item>Direct stream</item>
</string-array>
<string name="unfollow_confirm">Do you want to unfollow this account?</string>
<string name="title_video_peertube">Title for the video</string>
<string name="join_peertube">Join Peertube</string>
<string name="agreement_check_peertube">I am at least 16 years old and agree to the %1$s of this instance</string>
<string name="edit_profile">Edit profile</string>
<string name="make_an_action">Make an action</string>
<string name="action_unfollow">Unfollow</string>
<string name="display_nsfw_videos">Display sensitive videos</string>
<string name="fullscreen">Fullscreen</string>
<string name="bookmark_peertube_empty">There are no videos in your favourites!</string>
<string name="delete_channel">Remove channel</string>
<string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string>
<string name="no_muted">No muted accounts!</string>
<string name="error_display_name_channel">You must define a name and a display name for this channel!</string>
<string name="action_channel_create">Create a channel</string>
<string name="action_channel_edit">Edit channel</string>
<string name="email_error_domain">Email addresses in %1$s are not allowed!</string>
<string name="report_comment_size">Please, specify the reasons</string>
<string name="not_logged_in">You must be authenticated to proceed to this action!</string>
<string name="successful_report">The account has been reported!</string>
<string name="successful_video_report">The video has been reported!</string>
<string name="password_length_error">The password must contain at least 6 characters!</string>
<string name="muted_done">The account has been muted!</string>
<string name="edit_video">Edit video</string>
<string name="create_an_account">Create an account</string>
<string name="followers_count">%1$s Subscribers</string>
<string name="developer">Developer</string>
<string name="about_vesrion">Release %1$s</string>
<string name="about_the_app">About the app</string>
<string name="Donate">Donate</string>
<string name="source_code">Source code</string>
<string name="issue_tracker">Issue tracker</string>
<string name="action_instance_empty_content">No instances match these criteria</string>
<string name="instances_picker">Instances picker</string>
<string name="pickup_instance">Pickup this instance</string>
<string name="sensitive_video"> Sensitive videos</string>
<string name="sensitive_content">Sensitive content: %1$s</string>
<string name="followers_instance">%1$s followers instances</string>
<string name="help">Help</string>
<string name="pickup_categories">Pickup categories</string>
<string name="pickup_languages">Pickup languages</string>
<string name="notification_channel_name">Update information</string>
<string name="add_account">Add an account</string>
<string name="list_of_accounts">List of accounts</string>
</resources>

View File

@ -1,226 +1,328 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"> <resources xmlns:tools="http://schemas.android.com/tools">
<string name="title_home">Home</string> <string name="set_video_in_list">Videos in list</string>
<string name="title_local">Local</string> <string name="set_video_in_list_description">Change the layout for displaying videos in a list</string>
<string name="title_discover">Discover</string> <string name="no_instances">No instances !</string>
<string name="title_notifications">Notifications</string> <string name="show_more">Show more</string>
<string name="title_recently_added">Recently added</string> <string name="show_less">Show less</string>
<string name="title_trending">Trending</string> <string name="set_play_screen_lock">Screen lock</string>
<string name="title_most_liked">Most liked</string> <string name="set_play_screen_lock_description">Keep playing videos when the screen is locked</string>
<string name="toast_error">Oops! An error occurred!</string> <string name="save">Save</string>
<string name="title_muted">Muted</string> <string name="enable_history">Enable history</string>
<string name="title_channel">Channels</string> <string name="change_profile_picture">Change profile picture</string>
<string name="do_not_list">Do not list</string> <string name="set_autoplay">Automatic playback</string>
<string name="blur">Blur</string> <string name="set_autoplay_description">If enabled, videos will be played automatically</string>
<string name="display">Display</string> <string name="set_fullscreen">Fullscreen</string>
<string name="no_opinion">No opinion</string> <string name="set_fullscreen_description">Automatically open videos in fullscreen</string>
<string name="instance_choice">Pick an instance</string> <string name="set_autoplay_next_video">Automatically start playing the next video</string>
<string name="not_valide_instance">This instance does not seem to be valid!</string> <string name="set_autoplay_next_video_description">When a video ends, follow up with the next suggested video.</string>
<string name="no_videos">No videos!</string> <string name="add_public_reply">添加公开回复</string>
<string name="no_notifications">No notifications!</string> <string name="activity">Activity</string>
<string name="favicon">Favicon</string> <string name="app">App</string>
<string name="open_with">Open with</string> <string name="notif_new_video">New video from your subscriptions</string>
<string name="action_playlist_edit">Edit a playlist</string> <string name="notif_new_comment">New comment on your video</string>
<string name="close">Close</string> <string name="notif_blocked">One of your video is blocked/unblocked</string>
<string name="upload_video">Upload</string> <string name="notif_video_published">Video published (after transcoding/scheduled update)</string>
<string name="image_preview">Image preview</string> <string name="notif_video_imported">Video import finished</string>
<string name="file_to_upload">Select the file to upload</string> <string name="notif_new_followers">You or your channel(s) has a new follower</string>
<string name="channel">Channel</string> <string name="notif_video_mention">Someone mentioned you in video comments</string>
<string name="videos">Videos</string> <string name="notif_abuse_received">An abuse report received a new message</string>
<string name="channels">Channels</string> <string name="notif_abuse_accepted">One of your abuse reports has been accepted or rejected by moderators</string>
<string name="yes">Yes</string> <plurals name="number_of_replies">
<string name="no">No</string> <item quantity="other">%d 条回复</item>
<string name="cancel">Cancel</string> </plurals>
<string name="download">Download</string> <string name="reply">回复</string>
<string name="profile_picture">Profile picture</string> <string name="set_theme">主题</string>
<string name="update_video">Update video</string> <string name="set_theme_description">允许更改应用主题</string>
<string name="date_seconds">%d s</string> <string name="federation_issue">该视频无法邦联!</string>
<string name="date_minutes">%d m</string> <string name="title_home">主页</string>
<string name="date_hours">%d h</string> <string name="title_local">本站</string>
<string name="date_day">%d d</string> <string name="title_discover">发现</string>
<string name="number_view_video">%s views</string> <string name="title_notifications">通知</string>
<string name="title_instance_login">Instance host</string> <string name="title_recently_added">最新上传</string>
<string name="uploading">Uploading, please wait…</string> <string name="title_trending">当下流行</string>
<string name="upload_video_success">The video has been uploaded!</string> <string name="title_most_liked">最受好评</string>
<string name="toast_cancelled">Upload cancelled!</string> <string name="toast_error">哎呀!出现了个小错误!</string>
<string name="video_uploaded_action">Tap here to edit the video data.</string> <string name="title_muted">已隐藏</string>
<string name="toot_select_image_error">An error occurred while selecting the media!</string> <string name="title_channel">频道</string>
<string name="download_file">Download %1$s</string> <string name="do_not_list">不公开</string>
<string name="action_privacy">Privacy</string> <string name="blur">模糊化</string>
<string name="action_logout">Logout</string> <string name="display">显示</string>
<string name="login">Login</string> <string name="no_opinion">无意见</string>
<string name="password">Password</string> <string name="instance_choice">选择实例</string>
<string name="email">Email</string> <string name="not_valide_instance">您输入的实例地址是无效的!</string>
<string name="tags">Tags</string> <string name="no_videos">没有视频!</string>
<string name="validate">Validate</string> <string name="no_notifications">没有通知!</string>
<string name="share_with">Share with</string> <string name="favicon">网站图标</string>
<string name="shared_via">Shared via TubeLab</string> <string name="open_with">打开方式</string>
<string name="username">User name</string> <string name="action_playlist_edit">编辑播放列表</string>
<string name="settings">Settings</string> <string name="close">关闭</string>
<string name="logout_account_confirmation">Are you sure you want to logout @%1$s@%2$s?</string> <string name="upload_video">上传</string>
<string name="following">Following</string> <string name="image_preview">图像预览</string>
<string name="followers">Followers</string> <string name="file_to_upload">选择要上传的文件</string>
<string name="client_error">Unable to get client id!</string> <string name="new_video">New video</string>
<string name="toast_error_loading_account">An error occurred while switching between accounts!</string> <string name="new_blacklist">New blacklist info</string>
<string name="toast_error_search">An error occurred while searching!</string> <string name="new_my_video_published">Your video is published</string>
<string name="nothing_to_do">No action can be taken</string> <string name="new_my_video_error">Error when publishing your video</string>
<string name="action_follow">Follow</string> <string name="new_comment">New comment</string>
<string name="action_mute">Mute</string> <string name="new_follow">New follow</string>
<string name="search">Search</string> <string name="channel">频道</string>
<string name="delete">Delete</string> <string name="videos">视频</string>
<string name="action_lists_confirm_delete">Are you sure you want to permanently delete this list?</string> <string name="channels">频道</string>
<string name="action_lists_delete">Delete list</string> <string name="refresh_every">Fetch every:</string>
<string name="no_comments">Be the first to leave a comment on this video with the top right button!</string> <string-array name="refresh_time">
<string name="comment_no_allowed_peertube">Comments are not enabled on this video!</string> <item>Never</item>
<string name="pickup_resolution">Pick up a resolution</string> <item>15 minutes</item>
<string name="bookmark_add_peertube">The video has been added to bookmarks!</string> <item>30 minutes</item>
<string name="bookmark_remove_peertube">The video has been removed from bookmarks!</string> <item>1 hour</item>
<string name="information" tools:ignore="UnusedResources">Information</string> <item>2 hours</item>
<string name="app_logo">Logo of the application</string> <item>6 hours</item>
<item>12 hours</item>
</string-array>
<string name="yes"></string>
<string name="no"></string>
<string name="cancel">取消</string>
<string name="download">下载</string>
<string name="profile_picture">个人头像</string>
<string name="update_video">更新视频</string>
<string name="remove_from_playlist">从播放列表中删除</string>
<string name="date_seconds">%d 秒</string>
<string name="date_minutes">%d 分</string>
<string name="date_hours">%d 小时</string>
<string name="date_day">%d 天</string>
<string name="number_view_video">%s 次观看</string>
<string name="title_instance_login">实例主机</string>
<string name="uploading">正在上传中,请稍等……</string>
<string name="upload_video_success">视频已上传!</string>
<string name="toast_cancelled">上传已取消!</string>
<string name="video_uploaded_action">点击此处以编辑视频内容。</string>
<string name="toot_select_image_error">选择媒体文件时出现了错误!</string>
<string name="download_file">下载 %1$s</string>
<string name="account_updated">The account has been updated!</string>
<string name="action_privacy">隐私</string>
<string name="action_logout">登出</string>
<string name="login">登录</string>
<string name="password">密码</string>
<string name="email">电子邮箱</string>
<string name="tags">标签</string>
<string name="validate">验证</string>
<string name="share_with">分享</string>
<string name="shared_via">通过 TubeLab 分享</string>
<string name="username">用户名</string>
<string name="settings">设置</string>
<string name="logout_account_confirmation">确定要登出 @%1$s@%2$s 吗?</string>
<string name="following">正在订阅</string>
<string name="followers">订阅者</string>
<string name="client_error">无法获取客户端 ID</string>
<string name="toast_error_loading_account">在切换帐户时出现了错误!</string>
<string name="toast_error_search">搜索时出现了错误!</string>
<string name="nothing_to_do">无法进行任何操作</string>
<string name="action_follow">订阅</string>
<string name="action_mute">静音</string>
<string name="search">搜索​​​​</string>
<string name="delete">删除</string>
<string name="action_lists_confirm_delete">您确定要永久删除此列表吗?</string>
<string name="action_lists_delete">删除列表</string>
<string name="no_comments">点击右上角的按钮,拿到该视频的沙发!</string>
<string name="comment_no_allowed_peertube">此视频未启用评论!</string>
<string name="pickup_resolution">选择分辨率</string>
<string name="bookmark_add_peertube">此视频已添加到书签!</string>
<string name="bookmark_remove_peertube">此视频已从书签中删除!</string>
<string name="information" tools:ignore="UnusedResources">相关信息</string>
<string name="app_logo">应用程序的标志</string>
<!-- languages not translated --> <!-- languages not translated -->
<string name="subscriptions">Subscriptions</string> <string name="subscriptions">订阅列表</string>
<string name="delete_comment">Delete a comment</string> <string name="delete_instance">Delete an instance</string>
<string name="delete_comment_confirm">Are you sure to delete this comment?</string> <string name="delete_instance_confirm">Are you sure to delete this instance?</string>
<string name="set_video_mode">Mode for videos</string> <string name="delete_comment">删除评论</string>
<string name="my_videos">My videos</string> <string name="delete_comment_confirm">您确定要删除此评论吗?</string>
<string name="title">Title</string> <string name="set_video_mode">视频播放模式</string>
<string name="license">License</string> <string name="filter">筛选</string>
<string name="category">Category</string> <string name="sepia_search">Sepia 搜索引擎</string>
<string name="language">Language</string> <string name="sepia_element_nsfw">显示敏感内容</string>
<string name="peertube_nsfw">This video contains mature or explicit content</string> <string name="sepia_element_published_date">发布日期</string>
<string name="peertube_enable_comments">Enable video comments</string> <string name="any">任意</string>
<string name="description">Description</string> <string name="today">今天</string>
<string name="toast_peertube_video_updated">The video has been updated!</string> <string name="last_7_days">最近 7 天</string>
<string name="register_account">Register an account</string> <string name="last_30_days">最近 30 天</string>
<string name="email_address">Email address</string> <string name="last_365_days">最近 365 天</string>
<string name="preview">Preview</string> <string name="sepia_element_duration">时长</string>
<string name="change_preview">Change preview</string> <string name="duration_short"><![CDATA[短(< 4 分钟)]]></string>
<string name="name">Name</string> <string name="duration_medium"><![CDATA[中等长度4-10 分钟)]]></string>
<string name="display_more">Display more</string> <string name="duration_long"><![CDATA[长(> 10 分钟)]]></string>
<string name="no_channels">No channels!</string> <string name="display_all_categories">显示所有类别</string>
<string name="report_helper">Some explanations about your report…</string> <string name="display_all_licenses">显示所有许可协议</string>
<string name="report_video">Report video</string> <string name="display_all_languages">显示所有语言</string>
<string name="report">Report</string> <string name="all_of_these_tags">所有标签</string>
<string name="change_instance">Pick another instance</string> <string name="one_of_these_tags">其中一个标签</string>
<string name="my_history">History</string> <string name="apply_filter">应用筛选规则</string>
<string name="edit">Edit</string> <string-array name="sort_by_array">
<string name="video_settings">Video settings</string> <item>最佳匹配</item>
<string name="app_interface">Interface</string> <item>最近更新</item>
<string name="set_cache_mode">Cache</string> <item>最早视频</item>
<string name="set_video_cache_description">Définir le cache pour les vidéos (défaut 100Mo)</string> </string-array>
<string name="set_video_quality_description">Define a default quality for videos</string> <string name="sort_by">排序方式</string>
<string name="set_quality_mode">Resolution for videos</string> <string name="sepia_search_hint">输入关键字、频道名、视频标题等</string>
<string name="video_cache_value">Video cache: %d Mb</string> <string name="sepia_indication">Sepia 搜索引擎会显示匹配您搜索关键词的视频与频道,但它无法单单找到具体的上传者,或是视频主。如果您留意到列表里的一些视频含有不合适的内容,请向该视频所属的 PeerTube 实例管理者报告。</string>
<string name="captions">Captions</string> <string name="my_videos">我的视频</string>
<string name="pickup_captions">Pick captions</string> <string name="title">标题</string>
<string name="none">None</string> <string name="license">许可协议</string>
<string name="set_video_mode_description">Allows to change mode for playing videos (default, streaming or via a browser).</string> <string name="category">类别</string>
<string name="delete_video">Delete video</string> <string name="language">语言</string>
<string name="delete_video_confirmation">Are you sure to delete this video?</string> <string name="peertube_nsfw">该视频包含成人或色情的内容</string>
<string name="no_video_to_display">No videos to display!</string> <string name="peertube_enable_comments">启用视频评论功能</string>
<string name="share">Share</string> <string name="description">简介</string>
<string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> commented your video <b>%2$s</b>]]></string> <string name="toast_peertube_video_updated">视频已更新!</string>
<string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> is following your channel <b>%2$s</b>]]></string> <string name="register_account">注册账号</string>
<string name="peertube_follow_account"><![CDATA[<b>%1$s</b> is following your account]]></string> <string name="email_address">邮箱地址</string>
<string name="peertube_video_published"><![CDATA[Your video <b>%1$s</b> has been published]]></string> <string name="preview">预览图</string>
<string name="peertube_video_import_success"><![CDATA[Your video import <b>%1$s</b> succeeded]]></string> <string name="change_preview">更改预览图</string>
<string name="peertube_video_import_error"><![CDATA[Your video import <b>%1$s</b> failed]]></string> <string name="name">名字</string>
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> published a new video: <b>%2$s</b>]]></string> <string name="display_more">显示更多</string>
<string name="peertube_video_blacklist"><![CDATA[Your video <b>%1$s</b> has been blacklisted]]></string> <string name="no_channels">没有频道!</string>
<string name="peertube_video_unblacklist"><![CDATA[Your video <b>%1$s</b> has been unblacklisted]]></string> <string name="report_helper">补充您报告的理由…</string>
<string name="peertube_video_abuse"><![CDATA[New abuse report for video: <b>%1$s</b>]]></string> <string name="report_video">报告视频</string>
<string name="add_public_comment">Add a public comment</string> <string name="report">报告</string>
<string name="send_comment">Send comment</string> <string name="change_instance">选择其他实例</string>
<string name="all">All</string> <string name="my_history">观看历史</string>
<string name="edit">编辑</string>
<string name="video_settings">视频设置</string>
<string name="app_interface">界面</string>
<string name="set_cache_mode">缓存</string>
<string name="set_video_cache_description">设置视频缓存(默认 100 兆字节)</string>
<string name="set_video_quality_description">设定视频的默认播放质量</string>
<string name="set_quality_mode">视频分辨率</string>
<string name="video_cache_value">视频缓存: %d MB</string>
<string name="captions">字幕</string>
<string name="pickup_captions">选择字幕</string>
<string name="none"></string>
<string name="set_video_mode_description">允许更改视频的播放模式(标准,串流或使用网页播放器)。</string>
<string name="delete_account_comment">删除账号的评论</string>
<string name="delete_account_comment_confirm">您确定删除该账号下所有的评论?</string>
<string name="delete_video">删除视频</string>
<string name="delete_video_confirmation">您确定删除该视频吗?</string>
<string name="no_video_to_display">无视频可供显示!</string>
<string name="share">分享</string>
<string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> 评论了您的视频 <b>%2$s</b>]]></string>
<string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> 订阅了您的频道 <b>%2$s</b>]]></string>
<string name="peertube_follow_account"><![CDATA[<b>%1$s</b> 订阅了您的账号]]></string>
<string name="peertube_video_published"><![CDATA[您的视频 <b>%1$s</b> 已成功发布]]></string>
<string name="peertube_video_import_success"><![CDATA[您的视频 <b>%1$s</b> 已成功导入]]></string>
<string name="peertube_video_import_error"><![CDATA[您的视频 <b>%1$s</b> 导入失败]]></string>
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> 发布了新视频:<b>%2$s</b>]]></string>
<string name="peertube_video_blacklist"><![CDATA[您的视频 <b>%1$s</b> 已被加入黑名单]]></string>
<string name="peertube_video_unblacklist"><![CDATA[您的视频 <b>%1$s</b> 已被取消黑名单]]></string>
<string name="peertube_video_report_success"><![CDATA[您关于<b>%1$s</b>的滥用报告已被接受]]></string>
<string name="peertube_video_abuse"><![CDATA[关于您视频中不当内容的报告: <b>%1$s</b>]]></string>
<string name="add_public_comment">添加公开评论</string>
<string name="send_comment">发送评论</string>
<string name="all">全部</string>
<!-- end languages --> <!-- end languages -->
<string name="playlists">Playlists</string> <string name="delete_history">Delete videos history</string>
<string name="display_name">Display name</string> <string name="delete_history_confirm">Are you sure you want to delete all your videos history?</string>
<string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string> <string name="export_list">Export</string>
<string name="error_display_name">You must provide a display name!</string> <string name="import_list">Import</string>
<string name="error_channel_mandatory">The channel is required when the playlist is public.</string> <string name="export_notification_title">Successful export!</string>
<string name="action_playlist_create">Create a playlist</string> <string name="export_notification_content">Tap here to send the export by email</string>
<string name="action_playlist_empty_content">There is nothing in this playlist yet.</string> <string name="export_notification_subjet">New Playlist</string>
<string name="password_confirm">Confirm password</string> <string name="export_notification_body">Open the attached file with TubeLab</string>
<string name="agreement_check">I agree to %1$s and %2$s</string> <string name="playlists">播放列表</string>
<string name="server_rules">server rules</string> <string name="no_playlist">No playlists</string>
<string name="tos">terms of service</string> <string name="display_name">显示昵称</string>
<string name="sign_up">Sign up</string> <string name="action_playlist_add">您没有任何播放列表,点击 + 号添加一个新的播放列表</string>
<string name="all_field_filled">Please, fill all the fields!</string> <string name="error_display_name">您必须指定一个昵称!</string>
<string name="password_error">Passwords don\'t match!</string> <string name="error_channel_mandatory">您必须先创建一个频道,才能公开播放列表。</string>
<string name="email_error">The email doesn\'t seem to be valid!</string> <string name="action_playlist_create">创建播放列表</string>
<string name="email_indicator">You will be sent a confirmation e-mail</string> <string name="action_playlist_empty_content">这个播放列表中还没有任何内容。</string>
<string name="password_indicator">Use at least 8 characters</string> <string name="password_confirm">确认密码</string>
<string name="password_too_short">Password should contain at least 8 characters</string> <string name="agreement_check">我同意 %1$s 和 %2$s</string>
<string name="username_error">Username should only contain letters, numbers and underscores</string> <string name="server_rules">实例规则</string>
<string name="account_created">Account created!</string> <string name="tos">服务条款</string>
<string name="account_created_message"> Your account has been created!\n\n <string name="sign_up">注册</string>
Think to validate your email within the 48 next hours.\n\n <string name="all_field_filled">请填写所有栏位!</string>
You can now connect your account by writing <b>%1$s</b> in the first field and tap on <b>Connect</b>.\n\n <string name="password_error">密码不匹配!</string>
<b>Important</b>: If your instance required validation, you will receive an email once it is validated! <string name="email_error">该电子邮箱是无效的!</string>
</string> <string name="email_indicator">您将收到一封确认邮件</string>
<string name="account">Account</string> <string name="password_indicator">请至少使用 8 个字符</string>
<string name="report_account">Report account</string> <string name="password_too_short">密码应包含至少 8 个字符</string>
<string name="username_error">用户名只能包含字母、 数字和下划线</string>
<string name="account_created">帐户已创建!</string>
<string name="account_created_message"> 您的账号已经成功创建!\n\n
请在接下来的 48 小时内验证您的电子邮件。\n\n
您可以在第一栏中填写 <b>%1$s</b> ,并点击 <b>连接</b>来连接您的账号。\n\n
<b>重要通知</b>:如果您的实例要求验证,那么当验证完成时,您将会收到一封通知邮件! </string>
<string name="account">账号</string>
<string name="report_account">报告账号</string>
<string-array name="settings_video_mode"> <string-array name="settings_video_mode">
<item>Webview</item> <item>标准</item>
<item>Direct stream</item> <item>网页播放器</item>
<item>Magnet</item>
<item>Torrent</item>
</string-array>
<string-array name="settings_theme">
<item>亮色</item>
<item>暗色</item>
<item>自动切换</item>
</string-array> </string-array>
<string-array name="settings_video_quality"> <string-array name="settings_video_quality">
<item>High</item> <item></item>
<item>Medium</item> <item>中等</item>
<item>Low</item> <item></item>
</string-array> </string-array>
<string name="unfollow_confirm">Do you want to unfollow this account?</string> <string name="unfollow_confirm">您确定要取消订阅该账号吗?</string>
<string name="title_video_peertube">Title for the video</string> <string name="title_video_peertube">视频标题</string>
<string name="join_peertube">Join Peertube</string> <string name="join_peertube">加入Peertube</string>
<string name="agreement_check_peertube">I am at least 16 years old and agree to the %1$s of this instance</string> <string name="agreement_check_peertube">我已至少年满十六岁,并且同意该实例的 %1$s</string>
<string name="edit_profile">Edit profile</string> <string name="edit_profile">编辑个人资料</string>
<string name="make_an_action">Make an action</string> <string name="make_an_action">请选择其中一项操作</string>
<string name="action_unfollow">Unfollow</string> <string name="action_unfollow">取消订阅</string>
<string name="display_nsfw_videos">Display sensitive videos</string> <string name="display_nsfw_videos">显示敏感视频</string>
<string name="fullscreen">Fullscreen</string> <string name="fullscreen">全屏</string>
<string name="bookmark_peertube_empty">There are no videos in your favourites!</string> <string name="bookmark_peertube_empty">您的收藏列表为空!</string>
<string name="delete_channel">Remove channel</string> <string name="delete_channel">删除频道</string>
<string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string> <string name="action_channel_confirm_delete">您确定永久删除该频道吗?</string>
<string name="no_muted">No muted accounts!</string> <string name="modify_playlists">播放列表中的视频</string>
<string name="error_display_name_channel">You must define a name and a display name for this channel!</string> <string name="no_muted">您尚未隐藏任何账号!</string>
<string name="action_channel_create">Create a channel</string> <string name="error_display_name_channel">该频道的名字与显示称呼不可为空!</string>
<string name="action_channel_edit">Edit channel</string> <string name="action_channel_create">创建频道</string>
<string name="email_error_domain">Email addresses in %1$s are not allowed!</string> <string name="action_channel_edit">编辑频道</string>
<string name="report_comment_size">Please, specify the reasons</string> <string name="email_error_domain">在 %1$s 中的电子邮件地址是不行的!</string>
<string name="not_logged_in">You must be authenticated to proceed to this action!</string> <string name="report_comment_size">请务必注明原因</string>
<string name="successful_report">The account has been reported!</string> <string name="not_logged_in">您必须登录来进行此操作!</string>
<string name="successful_report_comment">The comment has been reported!</string> <string name="successful_report">已成功报告该账号!</string>
<string name="successful_video_report">The video has been reported!</string> <string name="successful_report_comment">已成功报告该条评论!</string>
<string name="password_length_error">The password must contain at least 6 characters!</string> <string name="successful_video_report">已成功报告该视频!</string>
<string name="muted_done">The account has been muted!</string> <string name="password_length_error">密码必须至少包含六个字符!</string>
<string name="edit_video">Edit video</string> <string name="muted_done">已成功隐藏该账号!</string>
<string name="create_an_account">Create an account</string> <string name="edit_video">编辑视频</string>
<string name="followers_count">%1$s Subscribers</string> <string name="create_an_account">创建账号</string>
<string name="developer">Developer</string> <string name="followers_count">%1$s 名订阅者</string>
<string name="about_vesrion">Release %1$s</string> <string name="developer">开发者</string>
<string name="about_the_app">About the app</string> <string name="about_vesrion">%1$s 版本</string>
<string name="Donate">Donate</string> <string name="about_the_app">关于本应用</string>
<string name="source_code">Source code</string> <string name="Donate">捐赠</string>
<string name="issue_tracker">Issue tracker</string> <string name="source_code">源码</string>
<string name="action_instance_empty_content">No instances match these criteria</string> <string name="issue_tracker">问题追踪</string>
<string name="instances_picker">Instances picker</string> <string name="action_instance_empty_content">没有符合选定条件的实例</string>
<string name="pickup_instance">Pick this instance</string> <string name="instances_picker">挑选实例</string>
<string name="sensitive_video"> Sensitive videos</string> <string name="pickup_instance">选择该实例</string>
<string name="sensitive_content">Sensitive content: %1$s</string> <string name="sensitive_video"> 敏感视频</string>
<string name="followers_instance">%1$s instance followers</string> <string name="sensitive_content">敏感内容:%1$s</string>
<string name="help">Help</string> <string name="followers_instance">该实例共有 %1$s 名订阅者</string>
<string name="pickup_categories">Pick categories</string> <string name="help">帮助</string>
<string name="pickup_languages">Pick languages</string> <string name="pickup_categories">选择类别</string>
<string name="notification_channel_name">Update information</string> <string name="pickup_languages">选择语言</string>
<string name="add_account">Add an account</string> <string name="notification_channel_name">更新信息</string>
<string name="list_of_accounts">List of accounts</string> <string name="fetch_notification_channel_name">Fetch notifications</string>
<string name="pause">Pause</string> <string name="add_account">添加账号</string>
<string name="play">Play</string> <string name="list_of_accounts">账号列表</string>
<string name="minimize">Minimize</string> <string name="pause">暂停</string>
<string name="fast_rewind">Fast rewind</string> <string name="play">播放</string>
<string name="fast_forward">Fast forward</string> <string name="minimize">最小化</string>
<string name="set_video_minimize">Minimize videos size</string> <string name="fast_rewind">快退</string>
<string name="set_video_minimize_description">Minimize videos size when the app is in background (Android N+)</string> <string name="fast_forward">快进</string>
<string name="set_video_language">Language filter</string> <string name="set_video_minimize">最小化视频</string>
<string name="set_video_language_description">Filter videos with different languages</string> <string name="set_video_minimize_description">当处于后台播放时,最小化视频(仅适用于 Android N 以及之后的版本)</string>
<string name="set_video_language">语言筛选</string>
<string name="set_video_language_description">筛选其他语言的视频</string>
</resources> </resources>

View File

@ -1,15 +1,50 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"> <resources xmlns:tools="http://schemas.android.com/tools">
<string name="title_home">Home</string> <string name="set_video_in_list">Videos in list</string>
<string name="title_local">Local</string> <string name="set_video_in_list_description">Change the layout for displaying videos in a list</string>
<string name="no_instances">No instances !</string>
<string name="show_more">Show more</string>
<string name="show_less">Show less</string>
<string name="set_play_screen_lock">Screen lock</string>
<string name="set_play_screen_lock_description">Keep playing videos when the screen is locked</string>
<string name="save">Save</string>
<string name="enable_history">Enable history</string>
<string name="change_profile_picture">Change profile picture</string>
<string name="set_autoplay">Automatic playback</string>
<string name="set_autoplay_description">If enabled, videos will be played automatically</string>
<string name="set_fullscreen">Fullscreen</string>
<string name="set_fullscreen_description">Automatically open videos in fullscreen</string>
<string name="set_autoplay_next_video">Automatically start playing the next video</string>
<string name="set_autoplay_next_video_description">When a video ends, follow up with the next suggested video.</string>
<string name="add_public_reply">Add a public reply</string>
<string name="activity">Activity</string>
<string name="app">App</string>
<string name="notif_new_video">New video from your subscriptions</string>
<string name="notif_new_comment">New comment on your video</string>
<string name="notif_blocked">One of your video is blocked/unblocked</string>
<string name="notif_video_published">Video published (after transcoding/scheduled update)</string>
<string name="notif_video_imported">Video import finished</string>
<string name="notif_new_followers">You or your channel(s) has a new follower</string>
<string name="notif_video_mention">Someone mentioned you in video comments</string>
<string name="notif_abuse_received">An abuse report received a new message</string>
<string name="notif_abuse_accepted">One of your abuse reports has been accepted or rejected by moderators</string>
<plurals name="number_of_replies">
<item quantity="other">%d 條回覆</item>
</plurals>
<string name="reply">回覆</string>
<string name="set_theme">Theme</string>
<string name="set_theme_description">Allow to change app theme</string>
<string name="federation_issue">The video cannot be federated!</string>
<string name="title_home">首頁</string>
<string name="title_local">本機</string>
<string name="title_discover">Discover</string> <string name="title_discover">Discover</string>
<string name="title_notifications">Notifications</string> <string name="title_notifications">通知</string>
<string name="title_recently_added">Recently added</string> <string name="title_recently_added">最近新增</string>
<string name="title_trending">Trending</string> <string name="title_trending">趨勢</string>
<string name="title_most_liked">Most liked</string> <string name="title_most_liked">Most liked</string>
<string name="toast_error">Oops! An error occurred!</string> <string name="toast_error">Oops! An error occurred!</string>
<string name="title_muted">Muted</string> <string name="title_muted">Muted</string>
<string name="title_channel">Channels</string> <string name="title_channel">頻道</string>
<string name="do_not_list">Do not list</string> <string name="do_not_list">Do not list</string>
<string name="blur">Blur</string> <string name="blur">Blur</string>
<string name="display">Display</string> <string name="display">Display</string>
@ -18,96 +53,143 @@
<string name="not_valide_instance">This instance does not seem to be valid!</string> <string name="not_valide_instance">This instance does not seem to be valid!</string>
<string name="no_videos">No videos!</string> <string name="no_videos">No videos!</string>
<string name="no_notifications">No notifications!</string> <string name="no_notifications">No notifications!</string>
<string name="favicon">Favicon</string> <string name="favicon">網站圖示</string>
<string name="open_with">Open with</string> <string name="open_with">選擇開啟工具</string>
<string name="action_playlist_edit">Edit a playlist</string> <string name="action_playlist_edit">Edit a playlist</string>
<string name="close">Close</string> <string name="close">關閉</string>
<string name="upload_video">Upload</string> <string name="upload_video">上傳</string>
<string name="image_preview">Image preview</string> <string name="image_preview">圖片預覽</string>
<string name="file_to_upload">Select the file to upload</string> <string name="file_to_upload">選取要上傳的檔案</string>
<string name="channel">Channel</string> <string name="new_video">New video</string>
<string name="videos">Videos</string> <string name="new_blacklist">New blacklist info</string>
<string name="channels">Channels</string> <string name="new_my_video_published">Your video is published</string>
<string name="yes">Yes</string> <string name="new_my_video_error">Error when publishing your video</string>
<string name="no">No</string> <string name="new_comment">New comment</string>
<string name="cancel">Cancel</string> <string name="new_follow">New follow</string>
<string name="download">Download</string> <string name="channel">頻道</string>
<string name="profile_picture">Profile picture</string> <string name="videos">影片</string>
<string name="update_video">Update video</string> <string name="channels">頻道</string>
<string name="date_seconds">%d s</string> <string name="refresh_every">Fetch every:</string>
<string name="date_minutes">%d m</string> <string-array name="refresh_time">
<string name="date_hours">%d h</string> <item>Never</item>
<string name="date_day">%d d</string> <item>15 minutes</item>
<string name="number_view_video">%s views</string> <item>30 minutes</item>
<item>1 hour</item>
<item>2 hours</item>
<item>6 hours</item>
<item>12 hours</item>
</string-array>
<string name="yes"></string>
<string name="no"></string>
<string name="cancel">取消</string>
<string name="download">下載</string>
<string name="profile_picture">個人檔案照片</string>
<string name="update_video">更新影片</string>
<string name="remove_from_playlist">Remove from playlist</string>
<string name="date_seconds">%d 秒</string>
<string name="date_minutes">%d 分鐘</string>
<string name="date_hours">%d 小時</string>
<string name="date_day">%d 天</string>
<string name="number_view_video">%s 次檢視</string>
<string name="title_instance_login">Instance host</string> <string name="title_instance_login">Instance host</string>
<string name="uploading">Uploading, please wait</string> <string name="uploading">正在上傳,請稍候…</string>
<string name="upload_video_success">The video has been uploaded!</string> <string name="upload_video_success">影片已上傳!</string>
<string name="toast_cancelled">Upload cancelled!</string> <string name="toast_cancelled">上傳已取消!</string>
<string name="video_uploaded_action">Tap here to edit the video data.</string> <string name="video_uploaded_action">Tap here to edit the video data.</string>
<string name="toot_select_image_error">An error occurred while selecting the media!</string> <string name="toot_select_image_error">選擇媒體時發生錯誤!</string>
<string name="download_file">Download %1$s</string> <string name="download_file">下載 %1$s</string>
<string name="action_privacy">Privacy</string> <string name="account_updated">The account has been updated!</string>
<string name="action_logout">Logout</string> <string name="action_privacy">隱私權</string>
<string name="login">Login</string> <string name="action_logout">登出</string>
<string name="password">Password</string> <string name="login">登入</string>
<string name="email">Email</string> <string name="password">密碼</string>
<string name="tags">Tags</string> <string name="email">電子郵件</string>
<string name="validate">Validate</string> <string name="tags">標籤</string>
<string name="share_with">Share with</string> <string name="validate">確認</string>
<string name="share_with">分享給</string>
<string name="shared_via">Shared via TubeLab</string> <string name="shared_via">Shared via TubeLab</string>
<string name="username">User name</string> <string name="username">使用者名稱</string>
<string name="settings">Settings</string> <string name="settings">設定</string>
<string name="logout_account_confirmation">Are you sure you want to logout @%1$s@%2$s?</string> <string name="logout_account_confirmation">您確定您要登出 @%1$s@%2$s 嗎?</string>
<string name="following">Following</string> <string name="following">正在關注</string>
<string name="followers">Followers</string> <string name="followers">關注者</string>
<string name="client_error">Unable to get client id!</string> <string name="client_error">無法取得客戶端 id</string>
<string name="toast_error_loading_account">An error occurred while switching between accounts!</string> <string name="toast_error_loading_account">在帳號間切換時發生錯誤!</string>
<string name="toast_error_search">An error occurred while searching!</string> <string name="toast_error_search">搜尋時發生錯誤!</string>
<string name="nothing_to_do">No action can be taken</string> <string name="nothing_to_do">無法採取行動</string>
<string name="action_follow">Follow</string> <string name="action_follow">關注</string>
<string name="action_mute">Mute</string> <string name="action_mute">靜音</string>
<string name="search">Search</string> <string name="search">搜尋</string>
<string name="delete">Delete</string> <string name="delete">刪除</string>
<string name="action_lists_confirm_delete">Are you sure you want to permanently delete this list?</string> <string name="action_lists_confirm_delete">您確定您想要永久刪除此列表嗎?</string>
<string name="action_lists_delete">Delete list</string> <string name="action_lists_delete">刪除列表</string>
<string name="no_comments">Be the first to leave a comment on this video with the top right button!</string> <string name="no_comments">使用右上角的按鈕來成為第一個對這部影片留下評論的人!</string>
<string name="comment_no_allowed_peertube">Comments are not enabled on this video!</string> <string name="comment_no_allowed_peertube">此影片未啟用評論!</string>
<string name="pickup_resolution">Pick up a resolution</string> <string name="pickup_resolution">選擇解析度</string>
<string name="bookmark_add_peertube">The video has been added to bookmarks!</string> <string name="bookmark_add_peertube">影片已加入到書籤中!</string>
<string name="bookmark_remove_peertube">The video has been removed from bookmarks!</string> <string name="bookmark_remove_peertube">影片已從書籤中移除!</string>
<string name="information" tools:ignore="UnusedResources">Information</string> <string name="information" tools:ignore="UnusedResources">資訊</string>
<string name="app_logo">Logo of the application</string> <string name="app_logo">應用程式圖示</string>
<!-- languages not translated --> <!-- languages not translated -->
<string name="subscriptions">Subscriptions</string> <string name="subscriptions">訂閱</string>
<string name="delete_comment">Delete a comment</string> <string name="delete_instance">Delete an instance</string>
<string name="delete_comment_confirm">Are you sure to delete this comment?</string> <string name="delete_instance_confirm">Are you sure to delete this instance?</string>
<string name="set_video_mode">Mode for videos</string> <string name="delete_comment">刪除留言</string>
<string name="my_videos">My videos</string> <string name="delete_comment_confirm">您想要刪除此留言嗎?</string>
<string name="title">Title</string> <string name="set_video_mode">影片模式</string>
<string name="license">License</string> <string name="filter">過濾</string>
<string name="category">Category</string> <string name="sepia_search">Sepia search</string>
<string name="language">Language</string> <string name="sepia_element_nsfw">Display sensitive content</string>
<string name="peertube_nsfw">This video contains mature or explicit content</string> <string name="sepia_element_published_date">Published date</string>
<string name="peertube_enable_comments">Enable video comments</string> <string name="any">Any</string>
<string name="description">Description</string> <string name="today">Today</string>
<string name="toast_peertube_video_updated">The video has been updated!</string> <string name="last_7_days">Last 7 days</string>
<string name="last_30_days">Last 30 days</string>
<string name="last_365_days">Last 365 days</string>
<string name="sepia_element_duration">Duration</string>
<string name="duration_short"><![CDATA[Short (<4 min)]]></string>
<string name="duration_medium"><![CDATA[Medium (410 min)]]></string>
<string name="duration_long"><![CDATA[Long (> 10 min)]]></string>
<string name="display_all_categories">Display all categories</string>
<string name="display_all_licenses">Display all licenses</string>
<string name="display_all_languages">Display all languages</string>
<string name="all_of_these_tags">All of these tags</string>
<string name="one_of_these_tags">One of these tags</string>
<string name="apply_filter">Apply filter</string>
<string-array name="sort_by_array">
<item>Best match</item>
<item>Most recent</item>
<item>Least recent</item>
</string-array>
<string name="sort_by">Sort by</string>
<string name="sepia_search_hint">Keyword, channel, video, etc.</string>
<string name="sepia_indication">Sepia Search displays videos and channels that match your search but is not the publisher, nor the owner. If you notice any problems with a video, report it to the administrators on the PeerTube website where the video is published.</string>
<string name="my_videos">我的影片</string>
<string name="title">標題</string>
<string name="license">授權條款</string>
<string name="category">分類</string>
<string name="language">語言</string>
<string name="peertube_nsfw">這個影片包含成人或裸露的內容</string>
<string name="peertube_enable_comments">啟用影片留言</string>
<string name="description">描述</string>
<string name="toast_peertube_video_updated">影片已更新!</string>
<string name="register_account">Register an account</string> <string name="register_account">Register an account</string>
<string name="email_address">Email address</string> <string name="email_address">Email address</string>
<string name="preview">Preview</string> <string name="preview">Preview</string>
<string name="change_preview">Change preview</string> <string name="change_preview">Change preview</string>
<string name="name">Name</string> <string name="name">Name</string>
<string name="display_more">Display more</string> <string name="display_more">顯示更多</string>
<string name="no_channels">No channels!</string> <string name="no_channels">No channels!</string>
<string name="report_helper">Some explanations about your report…</string> <string name="report_helper">Some explanations about your report…</string>
<string name="report_video">Report video</string> <string name="report_video">Report video</string>
<string name="report">Report</string> <string name="report">檢舉</string>
<string name="change_instance">Pick another instance</string> <string name="change_instance">Pick another instance</string>
<string name="my_history">History</string> <string name="my_history">歷史紀錄</string>
<string name="edit">Edit</string> <string name="edit">Edit</string>
<string name="video_settings">Video settings</string> <string name="video_settings">Video settings</string>
<string name="app_interface">Interface</string> <string name="app_interface">界面</string>
<string name="set_cache_mode">Cache</string> <string name="set_cache_mode">快取</string>
<string name="set_video_cache_description">Définir le cache pour les vidéos (défaut 100Mo)</string> <string name="set_video_cache_description">Set the cache for videos (default 100Mb)</string>
<string name="set_video_quality_description">Define a default quality for videos</string> <string name="set_video_quality_description">Define a default quality for videos</string>
<string name="set_quality_mode">Resolution for videos</string> <string name="set_quality_mode">Resolution for videos</string>
<string name="video_cache_value">Video cache: %d Mb</string> <string name="video_cache_value">Video cache: %d Mb</string>
@ -115,72 +197,92 @@
<string name="pickup_captions">Pick captions</string> <string name="pickup_captions">Pick captions</string>
<string name="none">None</string> <string name="none">None</string>
<string name="set_video_mode_description">Allows to change mode for playing videos (default, streaming or via a browser).</string> <string name="set_video_mode_description">Allows to change mode for playing videos (default, streaming or via a browser).</string>
<string name="delete_video">Delete video</string> <string name="delete_account_comment">Delete account comments</string>
<string name="delete_video_confirmation">Are you sure to delete this video?</string> <string name="delete_account_comment_confirm">Are you sure you want to remove all the comments of this account?</string>
<string name="no_video_to_display">No videos to display!</string> <string name="delete_video">刪除影片</string>
<string name="share">Share</string> <string name="delete_video_confirmation">您確定要刪除此部影片嗎?</string>
<string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> commented your video <b>%2$s</b>]]></string> <string name="no_video_to_display">沒有影片</string>
<string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> is following your channel <b>%2$s</b>]]></string> <string name="share">分享</string>
<string name="peertube_follow_account"><![CDATA[<b>%1$s</b> is following your account]]></string> <string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> 已在您的影片留言 <b>%2$s</b>]]></string>
<string name="peertube_video_published"><![CDATA[Your video <b>%1$s</b> has been published]]></string> <string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> 追蹤您的頻道 <b>%2$s</b>]]></string>
<string name="peertube_video_import_success"><![CDATA[Your video import <b>%1$s</b> succeeded]]></string> <string name="peertube_follow_account"><![CDATA[<b>%1$s</b> 追蹤您的帳號]]></string>
<string name="peertube_video_import_error"><![CDATA[Your video import <b>%1$s</b> failed]]></string> <string name="peertube_video_published"><![CDATA[您的影片 <b>%1$s</b> 已發佈]]></string>
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> published a new video: <b>%2$s</b>]]></string> <string name="peertube_video_import_success"><![CDATA[您的影片匯入 <b>%1$s</b> 成功]]></string>
<string name="peertube_video_blacklist"><![CDATA[Your video <b>%1$s</b> has been blacklisted]]></string> <string name="peertube_video_import_error"><![CDATA[您的影片匯入 <b>%1$s</b> 失敗]]></string>
<string name="peertube_video_unblacklist"><![CDATA[Your video <b>%1$s</b> has been unblacklisted]]></string> <string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> 發佈了新影片:<b>%2$s</b>]]></string>
<string name="peertube_video_blacklist"><![CDATA[您的影片 <b>%1$s</b> 已被加入黑名單]]></string>
<string name="peertube_video_unblacklist"><![CDATA[您的影片 <b>%1$s</b> 已被解除黑名單]]></string>
<string name="peertube_video_report_success"><![CDATA[Your abuse report <b>%1$s</b> has been accepted]]></string>
<string name="peertube_video_abuse"><![CDATA[New abuse report for video: <b>%1$s</b>]]></string> <string name="peertube_video_abuse"><![CDATA[New abuse report for video: <b>%1$s</b>]]></string>
<string name="add_public_comment">Add a public comment</string> <string name="add_public_comment">新增公開留言</string>
<string name="send_comment">Send comment</string> <string name="send_comment">傳送留言</string>
<string name="all">All</string> <string name="all">全部</string>
<!-- end languages --> <!-- end languages -->
<string name="playlists">Playlists</string> <string name="delete_history">Delete videos history</string>
<string name="display_name">Display name</string> <string name="delete_history_confirm">Are you sure you want to delete all your videos history?</string>
<string name="export_list">Export</string>
<string name="import_list">Import</string>
<string name="export_notification_title">Successful export!</string>
<string name="export_notification_content">Tap here to send the export by email</string>
<string name="export_notification_subjet">New Playlist</string>
<string name="export_notification_body">Open the attached file with TubeLab</string>
<string name="playlists">播放清單</string>
<string name="no_playlist">No playlists</string>
<string name="display_name">顯示名稱</string>
<string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string> <string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string>
<string name="error_display_name">You must provide a display name!</string> <string name="error_display_name">您必須提供顯示名稱!</string>
<string name="error_channel_mandatory">The channel is required when the playlist is public.</string> <string name="error_channel_mandatory">當播放清單公開時,頻道為必填。</string>
<string name="action_playlist_create">Create a playlist</string> <string name="action_playlist_create">建立播放清單</string>
<string name="action_playlist_empty_content">There is nothing in this playlist yet.</string> <string name="action_playlist_empty_content">目前播放清單中還沒有東西。</string>
<string name="password_confirm">Confirm password</string> <string name="password_confirm">確認密碼</string>
<string name="agreement_check">I agree to %1$s and %2$s</string> <string name="agreement_check">我同意 %1$s %2$s</string>
<string name="server_rules">server rules</string> <string name="server_rules">伺服器規則</string>
<string name="tos">terms of service</string> <string name="tos">服務條款</string>
<string name="sign_up">Sign up</string> <string name="sign_up">註冊</string>
<string name="all_field_filled">Please, fill all the fields!</string> <string name="all_field_filled">請填寫所有欄位!</string>
<string name="password_error">Passwords don\'t match!</string> <string name="password_error">密碼不相符!</string>
<string name="email_error">The email doesn\'t seem to be valid!</string> <string name="email_error">電子郵件似乎是無效的!</string>
<string name="email_indicator">You will be sent a confirmation e-mail</string> <string name="email_indicator">您將會收到一封確認用的電子郵件</string>
<string name="password_indicator">Use at least 8 characters</string> <string name="password_indicator">使用至少 8 個字元</string>
<string name="password_too_short">Password should contain at least 8 characters</string> <string name="password_too_short">密碼應該包含至少 8 個字元</string>
<string name="username_error">Username should only contain letters, numbers and underscores</string> <string name="username_error">使用者名稱應僅包含字母、數字與底線</string>
<string name="account_created">Account created!</string> <string name="account_created">已建立帳號!</string>
<string name="account_created_message"> Your account has been created!\n\n <string name="account_created_message"> Your account has been created!\n\n
Think to validate your email within the 48 next hours.\n\n Think to validate your email within the 48 next hours.\n\n
You can now connect your account by writing <b>%1$s</b> in the first field and tap on <b>Connect</b>.\n\n You can now connect your account by writing <b>%1$s</b> in the first field and tap on <b>Connect</b>.\n\n
<b>Important</b>: If your instance required validation, you will receive an email once it is validated! <b>Important</b>: If your instance required validation, you will receive an email once it is validated!
</string> </string>
<string name="account">Account</string> <string name="account">帳號</string>
<string name="report_account">Report account</string> <string name="report_account">回報帳號</string>
<string-array name="settings_video_mode"> <string-array name="settings_video_mode">
<item>Webview</item> <item>正常</item>
<item>Direct stream</item> <item>Torrent</item>
<item>Magnet</item>
<item>Torrent</item>
</string-array>
<string-array name="settings_theme">
<item></item>
<item></item>
<item>Automatic</item>
</string-array> </string-array>
<string-array name="settings_video_quality"> <string-array name="settings_video_quality">
<item>High</item> <item>High</item>
<item>Medium</item> <item>Medium</item>
<item>Low</item> <item>Low</item>
</string-array> </string-array>
<string name="unfollow_confirm">Do you want to unfollow this account?</string> <string name="unfollow_confirm">您想要取消追蹤此帳號嗎?</string>
<string name="title_video_peertube">Title for the video</string> <string name="title_video_peertube">影片標題</string>
<string name="join_peertube">Join Peertube</string> <string name="join_peertube">加入 Peertube</string>
<string name="agreement_check_peertube">I am at least 16 years old and agree to the %1$s of this instance</string> <string name="agreement_check_peertube">我至少 16 歲並同意此站台的 %1$s</string>
<string name="edit_profile">Edit profile</string> <string name="edit_profile">編輯個人資料</string>
<string name="make_an_action">Make an action</string> <string name="make_an_action">做動作</string>
<string name="action_unfollow">Unfollow</string> <string name="action_unfollow">取消追蹤</string>
<string name="display_nsfw_videos">Display sensitive videos</string> <string name="display_nsfw_videos">Display sensitive videos</string>
<string name="fullscreen">Fullscreen</string> <string name="fullscreen">Fullscreen</string>
<string name="bookmark_peertube_empty">There are no videos in your favourites!</string> <string name="bookmark_peertube_empty">There are no videos in your favourites!</string>
<string name="delete_channel">Remove channel</string> <string name="delete_channel">Remove channel</string>
<string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string> <string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string>
<string name="modify_playlists">Video in playlists</string>
<string name="no_muted">No muted accounts!</string> <string name="no_muted">No muted accounts!</string>
<string name="error_display_name_channel">You must define a name and a display name for this channel!</string> <string name="error_display_name_channel">You must define a name and a display name for this channel!</string>
<string name="action_channel_create">Create a channel</string> <string name="action_channel_create">Create a channel</string>
@ -196,12 +298,12 @@
<string name="edit_video">Edit video</string> <string name="edit_video">Edit video</string>
<string name="create_an_account">Create an account</string> <string name="create_an_account">Create an account</string>
<string name="followers_count">%1$s Subscribers</string> <string name="followers_count">%1$s Subscribers</string>
<string name="developer">Developer</string> <string name="developer">開發者</string>
<string name="about_vesrion">Release %1$s</string> <string name="about_vesrion">釋出 %1$s</string>
<string name="about_the_app">About the app</string> <string name="about_the_app">關於應用程式</string>
<string name="Donate">Donate</string> <string name="Donate">Donate</string>
<string name="source_code">Source code</string> <string name="source_code">原始碼</string>
<string name="issue_tracker">Issue tracker</string> <string name="issue_tracker">議題追蹤程式</string>
<string name="action_instance_empty_content">No instances match these criteria</string> <string name="action_instance_empty_content">No instances match these criteria</string>
<string name="instances_picker">Instances picker</string> <string name="instances_picker">Instances picker</string>
<string name="pickup_instance">Pick this instance</string> <string name="pickup_instance">Pick this instance</string>
@ -212,7 +314,8 @@
<string name="pickup_categories">Pick categories</string> <string name="pickup_categories">Pick categories</string>
<string name="pickup_languages">Pick languages</string> <string name="pickup_languages">Pick languages</string>
<string name="notification_channel_name">Update information</string> <string name="notification_channel_name">Update information</string>
<string name="add_account">Add an account</string> <string name="fetch_notification_channel_name">Fetch notifications</string>
<string name="add_account">新增帳號</string>
<string name="list_of_accounts">List of accounts</string> <string name="list_of_accounts">List of accounts</string>
<string name="pause">Pause</string> <string name="pause">Pause</string>
<string name="play">Play</string> <string name="play">Play</string>

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#212529</color>
<color name="colorPrimaryDark">#000000</color>
<color name="colorAccent">#F2690D</color>
<color name="tag_color">#bbF2690D</color>
<color name="tag_color_text">#FAFAFA</color>
<color name="positive_thumbs">#2b90d9</color>
<color name="negative_thumbs">#F44336</color>
<color name="red_1">#F44336</color>
</resources>

View File

@ -1,5 +1,60 @@
<resources xmlns:tools="http://schemas.android.com/tools"> <resources xmlns:tools="http://schemas.android.com/tools">
<string name="app_name" translatable="false">Tubelab</string> <string name="app_name" translatable="false">Tubelab</string>
<string name="app_id" translatable="false">app.fedilab.tubelab</string>
<string name="set_video_mode_choice" translatable="false">set_video_mode_choice</string>
<string name="set_video_minimize_choice" translatable="false">set_video_minimize_choice</string>
<string name="set_video_language_choice" translatable="false">set_video_language_choice</string>
<string name="set_video_quality_choice" translatable="false">set_video_quality_choice</string>
<string name="set_video_cache_choice" translatable="false">set_video_cache_choice</string>
<string name="set_autoplay_choice" translatable="false">set_autoplay_choice</string>
<string name="set_store_in_history" translatable="false">set_store_in_history</string>
<string name="set_autoplay_next_video_choice" translatable="false">set_autoplay_next_video_choice</string>
<string name="set_theme_choice" translatable="false">set_theme_choice</string>
<string name="set_fullscreen_choice" translatable="false">set_fullscreen_choice</string>
<string name="set_play_screen_lock_choice" translatable="false">set_play_screen_lock_choice</string>
<string name="set_video_in_list_choice" translatable="false">set_video_in_list_choice</string>
<string name="set_video_sensitive_choice" translatable="false">set_video_sensitive_choice</string>
<string name="set_video_in_list">Videos in list</string>
<string name="set_video_in_list_description">Change the layout for displaying videos in a list</string>
<string name="no_instances">No instances !</string>
<string name="show_more">Show more</string>
<string name="show_less">Show less</string>
<string name="set_play_screen_lock">Screen lock</string>
<string name="set_play_screen_lock_description">Keep playing videos when the screen is locked</string>
<string name="save">Save</string>
<string name="enable_history">Enable history</string>
<string name="change_profile_picture">Change profile picture</string>
<string name="set_autoplay">Automatic playback</string>
<string name="set_autoplay_description">If enabled, videos will be played automatically</string>
<string name="set_fullscreen">Fullscreen</string>
<string name="set_fullscreen_description">Automatically open videos in fullscreen</string>
<string name="set_autoplay_next_video">Automatically start playing the next video</string>
<string name="set_autoplay_next_video_description">When a video ends, follow up with the next suggested video.</string>
<string name="add_public_reply">Add a public reply</string>
<string name="activity">Activity</string>
<string name="app">App</string>
<string name="notif_new_video">New video from your subscriptions</string>
<string name="notif_new_comment">New comment on your video</string>
<string name="notif_blocked">One of your video is blocked/unblocked</string>
<string name="notif_video_published">Video published (after transcoding/scheduled update)</string>
<string name="notif_video_imported">Video import finished</string>
<string name="notif_new_followers">You or your channel(s) has a new follower</string>
<string name="notif_video_mention">Someone mentioned you in video comments</string>
<string name="notif_abuse_received">An abuse report received a new message</string>
<string name="notif_abuse_accepted">One of your abuse reports has been accepted or rejected by moderators</string>
<plurals name="number_of_replies">
<item quantity="one">%d reply</item>
<item quantity="other">%d replies</item>
</plurals>
<string name="reply">Reply</string>
<string name="set_theme">Theme</string>
<string name="set_theme_description">Allow to change app theme</string>
<string name="federation_issue">The video cannot be federated!</string>
<string name="title_home">Home</string> <string name="title_home">Home</string>
<string name="title_local">Local</string> <string name="title_local">Local</string>
<string name="title_discover">Discover</string> <string name="title_discover">Discover</string>
@ -26,17 +81,35 @@
<string name="image_preview">Image preview</string> <string name="image_preview">Image preview</string>
<string name="file_to_upload">Select the file to upload</string> <string name="file_to_upload">Select the file to upload</string>
<string name="new_video">New video</string>
<string name="new_blacklist">New blacklist info</string>
<string name="new_my_video_published">Your video is published</string>
<string name="new_my_video_error">Error when publishing your video</string>
<string name="new_comment">New comment</string>
<string name="new_follow">New follow</string>
<string name="channel">Channel</string> <string name="channel">Channel</string>
<string name="videos">Videos</string> <string name="videos">Videos</string>
<string name="channels">Channels</string> <string name="channels">Channels</string>
<string name="refresh_every">Fetch every:</string>
<string-array name="refresh_time">
<item>Never</item>
<item>15 minutes</item>
<item>30 minutes</item>
<item>1 hour</item>
<item>2 hours</item>
<item>6 hours</item>
<item>12 hours</item>
</string-array>
<string name="yes">Yes</string> <string name="yes">Yes</string>
<string name="no">No</string> <string name="no">No</string>
<string name="cancel">Cancel</string> <string name="cancel">Cancel</string>
<string name="download">Download</string> <string name="download">Download</string>
<string name="profile_picture">Profile picture</string> <string name="profile_picture">Profile picture</string>
<string name="update_video">Update video</string> <string name="update_video">Update video</string>
<string name="remove_from_playlist">Remove from playlist</string>
<string name="date_seconds">%d s</string> <string name="date_seconds">%d s</string>
<string name="date_minutes">%d m</string> <string name="date_minutes">%d m</string>
@ -54,6 +127,7 @@
<string name="download_file">Download %1$s</string> <string name="download_file">Download %1$s</string>
<string name="account_updated">The account has been updated!</string>
<string name="action_privacy">Privacy</string> <string name="action_privacy">Privacy</string>
<string name="action_logout">Logout</string> <string name="action_logout">Logout</string>
@ -106,10 +180,44 @@
<!-- languages not translated --> <!-- languages not translated -->
<string name="subscriptions">Subscriptions</string> <string name="subscriptions">Subscriptions</string>
<string name="delete_instance">Delete an instance</string>
<string name="delete_instance_confirm">Are you sure to delete this instance?</string>
<string name="delete_comment">Delete a comment</string> <string name="delete_comment">Delete a comment</string>
<string name="delete_comment_confirm">Are you sure to delete this comment?</string> <string name="delete_comment_confirm">Are you sure to delete this comment?</string>
<string name="set_video_mode">Mode for videos</string> <string name="set_video_mode">Mode for videos</string>
<string name="filter">Filter</string>
<string name="sepia_search">Sepia search</string>
<string name="sepia_element_nsfw">Display sensitive content</string>
<string name="sepia_element_published_date">Published date</string>
<string name="any">Any</string>
<string name="today">Today</string>
<string name="last_7_days">Last 7 days</string>
<string name="last_30_days">Last 30 days</string>
<string name="last_365_days">Last 365 days</string>
<string name="sepia_element_duration">Duration</string>
<string name="duration_short"><![CDATA[Short (<4 min)]]></string>
<string name="duration_medium"><![CDATA[Medium (410 min)]]></string>
<string name="duration_long"><![CDATA[Long (> 10 min)]]></string>
<string name="display_all_categories">Display all categories</string>
<string name="display_all_licenses">Display all licenses</string>
<string name="display_all_languages">Display all languages</string>
<string name="all_of_these_tags">All of these tags</string>
<string name="one_of_these_tags">One of these tags</string>
<string name="apply_filter">Apply filter</string>
<string-array name="sort_by_array">
<item>Best match</item>
<item>Most recent</item>
<item>Least recent</item>
</string-array>
<string name="sort_by">Sort by</string>
<string name="sepia_search_hint">Keyword, channel, video, etc.</string>
<string name="sepia_indication">Sepia Search displays videos and channels that match your search but is not the publisher, nor the owner. If you notice any problems with a video, report it to the administrators on the PeerTube website where the video is published.</string>
<string name="my_videos">My videos</string> <string name="my_videos">My videos</string>
<string name="title">Title</string> <string name="title">Title</string>
<string name="license">License</string> <string name="license">License</string>
@ -139,13 +247,9 @@
<string name="video_settings">Video settings</string> <string name="video_settings">Video settings</string>
<string name="app_interface">Interface</string> <string name="app_interface">Interface</string>
<string name="set_video_mode_choice" translatable="false">set_video_mode_choice</string>
<string name="set_video_minimize_choice" translatable="false">set_video_minimize_choice</string>
<string name="set_video_language_choice" translatable="false">set_video_language_choice</string>
<string name="set_video_quality_choice" translatable="false">set_video_quality_choice</string>
<string name="set_video_cache_choice" translatable="false">set_video_cache_choice</string>
<string name="set_cache_mode">Cache</string> <string name="set_cache_mode">Cache</string>
<string name="set_video_cache_description">Définir le cache pour les vidéos (défaut 100Mo)</string> <string name="set_video_cache_description">Set the cache for videos (default 100Mb)</string>
<string name="set_video_quality_description">Define a default quality for videos</string> <string name="set_video_quality_description">Define a default quality for videos</string>
<string name="set_quality_mode">Resolution for videos</string> <string name="set_quality_mode">Resolution for videos</string>
<string name="video_cache_value">Video cache: %d Mb</string> <string name="video_cache_value">Video cache: %d Mb</string>
@ -155,6 +259,8 @@
<string name="none">None</string> <string name="none">None</string>
<string name="set_video_mode_description">Allows to change mode for playing videos (default, streaming or via a browser).</string> <string name="set_video_mode_description">Allows to change mode for playing videos (default, streaming or via a browser).</string>
<string name="delete_account_comment">Delete account comments</string>
<string name="delete_account_comment_confirm">Are you sure you want to remove all the comments of this account?</string>
<string name="delete_video">Delete video</string> <string name="delete_video">Delete video</string>
<string name="delete_video_confirmation">Are you sure to delete this video?</string> <string name="delete_video_confirmation">Are you sure to delete this video?</string>
@ -170,13 +276,26 @@
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> published a new video: <b>%2$s</b>]]></string> <string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> published a new video: <b>%2$s</b>]]></string>
<string name="peertube_video_blacklist"><![CDATA[Your video <b>%1$s</b> has been blacklisted]]></string> <string name="peertube_video_blacklist"><![CDATA[Your video <b>%1$s</b> has been blacklisted]]></string>
<string name="peertube_video_unblacklist"><![CDATA[Your video <b>%1$s</b> has been unblacklisted]]></string> <string name="peertube_video_unblacklist"><![CDATA[Your video <b>%1$s</b> has been unblacklisted]]></string>
<string name="peertube_video_report_success"><![CDATA[Your abuse report <b>%1$s</b> has been accepted]]></string>
<string name="peertube_video_abuse"><![CDATA[New abuse report for video: <b>%1$s</b>]]></string> <string name="peertube_video_abuse"><![CDATA[New abuse report for video: <b>%1$s</b>]]></string>
<string name="add_public_comment">Add a public comment</string> <string name="add_public_comment">Add a public comment</string>
<string name="send_comment">Send comment</string> <string name="send_comment">Send comment</string>
<string name="all">All</string> <string name="all">All</string>
<!-- end languages --> <!-- end languages -->
<string name="delete_history">Delete videos history</string>
<string name="delete_history_confirm">Are you sure you want to delete all your videos history?</string>
<string name="export_list">Export</string>
<string name="import_list">Import</string>
<string name="export_notification_title">Successful export!</string>
<string name="export_notification_content">Tap here to send the export by email</string>
<string name="export_notification_subjet">New Playlist</string>
<string name="export_notification_body">Open the attached file with TubeLab</string>
<string name="playlists">Playlists</string> <string name="playlists">Playlists</string>
<string name="no_playlist">No playlists</string>
<string name="display_name">Display name</string> <string name="display_name">Display name</string>
<string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string> <string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string>
<string name="error_display_name">You must provide a display name!</string> <string name="error_display_name">You must provide a display name!</string>
@ -206,10 +325,20 @@
<string name="report_account">Report account</string> <string name="report_account">Report account</string>
<string-array name="settings_video_mode"> <string-array name="settings_video_mode">
<item>Normal</item>
<item>Webview</item> <item>Webview</item>
<item>Direct stream</item> <item>Magnet</item>
<item>Torrent</item>
</string-array> </string-array>
<string-array name="settings_theme">
<item>Light</item>
<item>Dark</item>
<item>Automatic</item>
</string-array>
<string-array name="settings_video_quality"> <string-array name="settings_video_quality">
<item>High</item> <item>High</item>
<item>Medium</item> <item>Medium</item>
@ -234,6 +363,7 @@
<string name="delete_channel">Remove channel</string> <string name="delete_channel">Remove channel</string>
<string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string> <string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string>
<string name="modify_playlists">Video in playlists</string>
<string name="no_muted">No muted accounts!</string> <string name="no_muted">No muted accounts!</string>
<string name="error_display_name_channel">You must define a name and a display name for this channel!</string> <string name="error_display_name_channel">You must define a name and a display name for this channel!</string>
@ -278,6 +408,7 @@
<string name="pickup_categories">Pick categories</string> <string name="pickup_categories">Pick categories</string>
<string name="pickup_languages">Pick languages</string> <string name="pickup_languages">Pick languages</string>
<string name="notification_channel_name">Update information</string> <string name="notification_channel_name">Update information</string>
<string name="fetch_notification_channel_name">Fetch notifications</string>
<string name="add_account">Add an account</string> <string name="add_account">Add an account</string>
<string name="list_of_accounts">List of accounts</string> <string name="list_of_accounts">List of accounts</string>

View File

@ -1,17 +0,0 @@
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary_full</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark_full</item>
<item name="colorAccent">@color/colorAccent_full</item>
</style>
<style name="AppThemeNoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary_full</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark_full</item>
<item name="colorAccent">@color/colorAccent_full</item>
</style>
</resources>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path
name="my_images"
path="/TubeLab/" />
</paths>

View File

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="app.fedilab.fedilabtube">
<application
android:name=".FedilabTube"
android:allowBackup="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:replace="android:allowBackup">
<activity
android:name=".MainActivity"
tools:node="merge">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="content" />
<data android:scheme="file" />
<data android:mimeType="*/*" />
<data android:pathPattern=".*\\.tubelab" />
<data android:pathPattern=".*\\..*\\.tubelab" />
<data android:pathPattern=".*\\..*\\..*\\.tubelab" />
<data android:pathPattern=".*\\..*\\..*\\..*\\.tubelab" />
<data android:pathPattern=".*\\..*\\..*\\..*\\..*\\.tubelab" />
<data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\.tubelab" />
</intent-filter>
</activity>
</application>
</manifest>

View File

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="app.fedilab.fedilabtube">
<application
android:name=".FedilabTube"
android:allowBackup="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:replace="android:allowBackup">
<activity
android:name=".PeertubeActivity"
tools:node="mergeOnlyAttributes">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- The app is a good candidate for URL in https://domain.name/videos/watch/xxxxx-->
<data
android:host="*"
android:pathPrefix="/videos/watch/"
android:scheme="https" />
</intent-filter>
</activity>
</application>
</manifest>

View File

@ -18,7 +18,7 @@
<application <application
android:name=".FedilabTube" android:name=".FedilabTube"
android:allowBackup="false" android:allowBackup="false"
android:requestLegacyExternalStorage="true"
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
android:label="@string/app_name" android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round" android:roundIcon="@mipmap/ic_launcher_round"
@ -58,11 +58,21 @@
android:configChanges="orientation|screenSize" android:configChanges="orientation|screenSize"
android:label="@string/app_name" android:label="@string/app_name"
android:windowSoftInputMode="stateAlwaysHidden" /> android:windowSoftInputMode="stateAlwaysHidden" />
<activity
android:name=".ShowAccountActivity"
android:configChanges="orientation|screenSize"
android:label="@string/app_name"
android:windowSoftInputMode="stateAlwaysHidden" />
<activity <activity
android:name=".AccountActivity" android:name=".AccountActivity"
android:configChanges="orientation|screenSize" android:configChanges="orientation|screenSize"
android:label="@string/app_name" android:label="@string/app_name"
android:windowSoftInputMode="stateAlwaysHidden" /> android:windowSoftInputMode="stateAlwaysHidden" />
<activity
android:name=".MyAccountActivity"
android:configChanges="orientation|screenSize"
android:label="@string/app_name"
android:windowSoftInputMode="stateAlwaysHidden" />
<activity <activity
android:name=".SearchActivity" android:name=".SearchActivity"
android:configChanges="orientation|screenSize" android:configChanges="orientation|screenSize"
@ -73,7 +83,11 @@
android:configChanges="orientation|screenSize" android:configChanges="orientation|screenSize"
android:label="@string/app_name" android:label="@string/app_name"
android:windowSoftInputMode="stateAlwaysHidden" /> android:windowSoftInputMode="stateAlwaysHidden" />
<activity
android:name=".AllLocalPlaylistsActivity"
android:configChanges="orientation|screenSize"
android:label="@string/app_name"
android:windowSoftInputMode="stateAlwaysHidden" />
<activity <activity
android:name=".InstancePickerActivity" android:name=".InstancePickerActivity"
android:configChanges="orientation|screenSize" android:configChanges="orientation|screenSize"
@ -86,10 +100,25 @@
android:label="@string/app_name" android:label="@string/app_name"
android:windowSoftInputMode="stateAlwaysHidden" /> android:windowSoftInputMode="stateAlwaysHidden" />
<activity <activity
android:name=".MyVideosActivity" android:name=".LocalPlaylistsActivity"
android:configChanges="orientation|screenSize" android:configChanges="orientation|screenSize"
android:label="@string/app_name" android:label="@string/app_name"
android:windowSoftInputMode="stateAlwaysHidden" /> android:windowSoftInputMode="stateAlwaysHidden" />
<activity
android:name=".VideosTimelineActivity"
android:configChanges="orientation|screenSize"
android:label="@string/app_name"
android:windowSoftInputMode="stateAlwaysHidden" />
<activity
android:name=".SepiaSearchActivity"
android:configChanges="orientation|screenSize"
android:label="@string/sepia_search"
android:windowSoftInputMode="stateAlwaysHidden" />
<activity
android:name=".ManageInstancesActivity"
android:configChanges="orientation|screenSize"
android:label="@string/instances_picker"
android:windowSoftInputMode="stateAlwaysHidden" />
<activity <activity
android:name=".WebviewActivity" android:name=".WebviewActivity"
android:configChanges="keyboardHidden|orientation|screenSize" android:configChanges="keyboardHidden|orientation|screenSize"
@ -135,6 +164,23 @@
<action android:name="app.fedilab.fedilabtube.uploadservice.broadcast.status" /> <action android:name="app.fedilab.fedilabtube.uploadservice.broadcast.status" />
</intent-filter> </intent-filter>
</receiver> </receiver>
<provider
android:name="androidx.work.impl.WorkManagerInitializer"
android:authorities="${applicationId}.workmanager-init"
tools:node="remove"
android:exported="false" />
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.fileProvider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
</application> </application>
</manifest> </manifest>

File diff suppressed because it is too large Load Diff

View File

@ -37,19 +37,18 @@ import androidx.fragment.app.FragmentStatePagerAdapter;
import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.PagerAdapter;
import androidx.viewpager.widget.ViewPager; import androidx.viewpager.widget.ViewPager;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.tabs.TabLayout; import com.google.android.material.tabs.TabLayout;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.List;
import app.fedilab.fedilabtube.client.RetrofitPeertubeAPI; import app.fedilab.fedilabtube.client.RetrofitPeertubeAPI;
import app.fedilab.fedilabtube.client.data.AccountData.Account; import app.fedilab.fedilabtube.client.data.AccountData.Account;
import app.fedilab.fedilabtube.drawer.OwnAccountsAdapter;
import app.fedilab.fedilabtube.fragment.DisplayAccountsFragment; import app.fedilab.fedilabtube.fragment.DisplayAccountsFragment;
import app.fedilab.fedilabtube.fragment.DisplayChannelsFragment; import app.fedilab.fedilabtube.fragment.DisplayChannelsFragment;
import app.fedilab.fedilabtube.fragment.DisplayNotificationsFragment; import app.fedilab.fedilabtube.fragment.DisplayNotificationsFragment;
import app.fedilab.fedilabtube.helper.Helper; import app.fedilab.fedilabtube.helper.Helper;
import app.fedilab.fedilabtube.helper.SwitchAccountHelper;
import app.fedilab.fedilabtube.sqlite.AccountDAO; import app.fedilab.fedilabtube.sqlite.AccountDAO;
import app.fedilab.fedilabtube.sqlite.Sqlite; import app.fedilab.fedilabtube.sqlite.Sqlite;
@ -99,6 +98,8 @@ public class AccountActivity extends AppCompatActivity {
displayname.setText(account.getDisplayName()); displayname.setText(account.getDisplayName());
instanceView.setText(account.getHost()); instanceView.setText(account.getHost());
FloatingActionButton edit_profile = findViewById(R.id.edit_profile);
edit_profile.setOnClickListener(v -> startActivity(new Intent(AccountActivity.this, MyAccountActivity.class)));
Button logout_button = findViewById(R.id.logout_button); Button logout_button = findViewById(R.id.logout_button);
logout_button.setOnClickListener(v -> { logout_button.setOnClickListener(v -> {
@ -210,42 +211,7 @@ public class AccountActivity extends AppCompatActivity {
finish(); finish();
return true; return true;
} else if (item.getItemId() == R.id.action_add_account) { } else if (item.getItemId() == R.id.action_add_account) {
SQLiteDatabase db = Sqlite.getInstance(getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); SwitchAccountHelper.switchDialog(AccountActivity.this, true);
List<Account> accounts = new AccountDAO(AccountActivity.this, db).getAllAccount();
AlertDialog.Builder builderSingle = new AlertDialog.Builder(AccountActivity.this);
builderSingle.setTitle(getString(R.string.list_of_accounts));
if (accounts != null) {
final OwnAccountsAdapter accountsListAdapter = new OwnAccountsAdapter(AccountActivity.this, accounts);
final Account[] accountArray = new Account[accounts.size()];
int i = 0;
for (Account account : accounts) {
accountArray[i] = account;
i++;
}
builderSingle.setAdapter(accountsListAdapter, (dialog, which) -> {
final Account account = accountArray[which];
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE);
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString(Helper.PREF_KEY_OAUTH_TOKEN, account.getToken());
editor.putString(Helper.PREF_INSTANCE, account.getHost());
editor.putString(Helper.PREF_KEY_ID, account.getId());
editor.putString(Helper.PREF_KEY_NAME, account.getUsername());
editor.apply();
dialog.dismiss();
Intent intent = new Intent(AccountActivity.this, MainActivity.class);
startActivity(intent);
finish();
});
}
builderSingle.setNegativeButton(R.string.cancel, (dialog, which) -> dialog.dismiss());
builderSingle.setPositiveButton(R.string.add_account, (dialog, which) -> {
Intent intent = new Intent(AccountActivity.this, LoginActivity.class);
startActivity(intent);
finish();
});
builderSingle.show();
} }
return super.onOptionsItemSelected(item); return super.onOptionsItemSelected(item);
} }

View File

@ -0,0 +1,120 @@
package app.fedilab.fedilabtube;
/* Copyright 2020 Thomas Schneider
*
* This file is a part of TubeLab
*
* This program is free software; you can redistribute it and/or modify it under the terms of the
* GNU General Public License as published by the Free Software Foundation; either version 3 of the
* License, or (at your option) any later version.
*
* TubeLab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
* Public License for more details.
*
* You should have received a copy of the GNU General Public License along with TubeLab; if not,
* see <http://www.gnu.org/licenses>. */
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import java.util.ArrayList;
import java.util.List;
import app.fedilab.fedilabtube.client.data.PlaylistData.Playlist;
import app.fedilab.fedilabtube.client.data.VideoPlaylistData;
import app.fedilab.fedilabtube.drawer.PlaylistAdapter;
import app.fedilab.fedilabtube.viewmodel.PlaylistsVM;
public class AllLocalPlaylistsActivity extends AppCompatActivity implements PlaylistAdapter.AllPlaylistRemoved {
PlaylistAdapter playlistAdapter;
private RelativeLayout mainLoader;
private RelativeLayout textviewNoAction;
private List<Playlist> playlists;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_all_playlist);
if (getSupportActionBar() != null)
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
setTitle(R.string.playlists);
textviewNoAction = findViewById(R.id.no_action);
mainLoader = findViewById(R.id.loader);
RelativeLayout nextElementLoader = findViewById(R.id.loading_next_items);
mainLoader.setVisibility(View.VISIBLE);
nextElementLoader.setVisibility(View.GONE);
PlaylistsVM viewModel = new ViewModelProvider(AllLocalPlaylistsActivity.this).get(PlaylistsVM.class);
viewModel.localePlaylist().observe(AllLocalPlaylistsActivity.this, this::manageVIewPlaylists);
FloatingActionButton add_new = findViewById(R.id.add_new);
add_new.setVisibility(View.GONE);
TextView no_action_text = findViewById(R.id.no_action_text);
no_action_text.setText(R.string.no_playlist);
playlists = new ArrayList<>();
RecyclerView lv_playlist = findViewById(R.id.lv_playlist);
playlistAdapter = new PlaylistAdapter(playlists, true);
playlistAdapter.allPlaylistRemoved = this;
lv_playlist.setAdapter(playlistAdapter);
LinearLayoutManager mLayoutManager = new LinearLayoutManager(AllLocalPlaylistsActivity.this);
lv_playlist.setLayoutManager(mLayoutManager);
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
public void manageVIewPlaylists(List<VideoPlaylistData.VideoPlaylistExport> videoPlaylistExports) {
mainLoader.setVisibility(View.GONE);
if (videoPlaylistExports == null) {
textviewNoAction.setVisibility(View.VISIBLE);
return;
}
if (videoPlaylistExports.size() > 0) {
for (VideoPlaylistData.VideoPlaylistExport videoPlaylistExport : videoPlaylistExports) {
playlists.add(videoPlaylistExport.getPlaylist());
}
playlistAdapter.notifyDataSetChanged();
textviewNoAction.setVisibility(View.GONE);
} else {
textviewNoAction.setVisibility(View.VISIBLE);
}
}
@Override
public void onAllPlaylistRemoved() {
textviewNoAction.setVisibility(View.VISIBLE);
}
}

View File

@ -29,7 +29,6 @@ import android.widget.ArrayAdapter;
import android.widget.Button; import android.widget.Button;
import android.widget.EditText; import android.widget.EditText;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RelativeLayout; import android.widget.RelativeLayout;
import android.widget.Spinner; import android.widget.Spinner;
import android.widget.Toast; import android.widget.Toast;
@ -37,6 +36,8 @@ import android.widget.Toast;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.google.android.material.floatingactionbutton.FloatingActionButton;
@ -61,7 +62,7 @@ import es.dmoral.toasty.Toasty;
import static app.fedilab.fedilabtube.MainActivity.peertubeInformation; import static app.fedilab.fedilabtube.MainActivity.peertubeInformation;
public class AllPlaylistsActivity extends AppCompatActivity { public class AllPlaylistsActivity extends AppCompatActivity implements PlaylistAdapter.AllPlaylistRemoved {
PlaylistAdapter playlistAdapter; PlaylistAdapter playlistAdapter;
@ -109,10 +110,12 @@ public class AllPlaylistsActivity extends AppCompatActivity {
playlists = new ArrayList<>(); playlists = new ArrayList<>();
ListView lv_playlist = findViewById(R.id.lv_playlist); RecyclerView lv_playlist = findViewById(R.id.lv_playlist);
playlistAdapter = new PlaylistAdapter(AllPlaylistsActivity.this, playlists, textviewNoAction); playlistAdapter = new PlaylistAdapter(playlists, false);
playlistAdapter.allPlaylistRemoved = this;
lv_playlist.setAdapter(playlistAdapter); lv_playlist.setAdapter(playlistAdapter);
LinearLayoutManager mLayoutManager = new LinearLayoutManager(AllPlaylistsActivity.this);
lv_playlist.setLayoutManager(mLayoutManager);
add_new.setOnClickListener(view -> manageAlert(null)); add_new.setOnClickListener(view -> manageAlert(null));
} }
@ -195,7 +198,7 @@ public class AllPlaylistsActivity extends AppCompatActivity {
Toasty.error(AllPlaylistsActivity.this, getString(R.string.error_channel_mandatory), Toast.LENGTH_LONG).show(); Toasty.error(AllPlaylistsActivity.this, getString(R.string.error_channel_mandatory), Toast.LENGTH_LONG).show();
} else { } else {
if (privacyToSend != null) { if (privacyToSend != null) {
playlistElement.setPrivacy((int) privacyItem.getId()); playlistElement.setPrivacy(privacyItem.getId());
} }
new Thread(() -> { new Thread(() -> {
String playlistId; String playlistId;
@ -310,7 +313,7 @@ public class AllPlaylistsActivity extends AppCompatActivity {
if (playlistToEdit != null) { if (playlistToEdit != null) {
Item privacy = playlistToEdit.getPrivacy(); Item privacy = playlistToEdit.getPrivacy();
if (privacy.getId() > 0) { if (privacy.getId() > 0) {
set_upload_privacy.setSelection((int) privacy.getId() - 1); set_upload_privacy.setSelection(privacy.getId() - 1);
} }
} else { } else {
set_upload_privacy.setSelection(2); set_upload_privacy.setSelection(2);
@ -345,7 +348,7 @@ public class AllPlaylistsActivity extends AppCompatActivity {
Item privacy = playlistToEdit.getPrivacy(); Item privacy = playlistToEdit.getPrivacy();
if (privacy.getId() > 0) { if (privacy.getId() > 0) {
set_upload_privacy.setSelection((int) privacy.getId() - 1); set_upload_privacy.setSelection(privacy.getId() - 1);
} }
} }
@ -378,4 +381,9 @@ public class AllPlaylistsActivity extends AppCompatActivity {
set_upload_channel.setSelection(position); set_upload_channel.setSelection(position);
} }
} }
@Override
public void onAllPlaylistRemoved() {
textviewNoAction.setVisibility(View.VISIBLE);
}
} }

View File

@ -15,13 +15,38 @@ package app.fedilab.fedilabtube;
* see <http://www.gnu.org/licenses>. */ * see <http://www.gnu.org/licenses>. */
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences;
import androidx.multidex.MultiDex; import androidx.multidex.MultiDex;
import androidx.multidex.MultiDexApplication; import androidx.multidex.MultiDexApplication;
import androidx.work.Configuration;
import androidx.work.WorkManager;
import net.gotev.uploadservice.UploadService; import net.gotev.uploadservice.UploadService;
import app.fedilab.fedilabtube.helper.Helper;
import app.fedilab.fedilabtube.helper.ThemeHelper;
import app.fedilab.fedilabtube.worker.WorkHelper;
public class FedilabTube extends MultiDexApplication { public class FedilabTube extends MultiDexApplication {
@Override
public void onCreate() {
super.onCreate();
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
int interval = sharedpreferences.getInt(Helper.NOTIFICATION_INTERVAL, 60);
Configuration myConfig = new Configuration.Builder()
.setMinimumLoggingLevel(android.util.Log.INFO)
.build();
WorkManager.initialize(FedilabTube.this, myConfig);
if (interval >= 15) {
WorkHelper.fetchNotifications(this, interval);
}
}
@Override @Override
protected void attachBaseContext(Context base) { protected void attachBaseContext(Context base) {
super.attachBaseContext(base); super.attachBaseContext(base);
@ -29,6 +54,11 @@ public class FedilabTube extends MultiDexApplication {
MultiDex.install(FedilabTube.this); MultiDex.install(FedilabTube.this);
UploadService.NAMESPACE = BuildConfig.APPLICATION_ID; UploadService.NAMESPACE = BuildConfig.APPLICATION_ID;
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
int themePref = sharedpreferences.getInt(Helper.SET_THEME, Helper.DEFAULT_MODE);
ThemeHelper.switchTo(themePref);
} }

View File

@ -117,7 +117,6 @@ public class InstancePickerActivity extends AppCompatActivity {
pickup_languages.setOnClickListener(v -> { pickup_languages.setOnClickListener(v -> {
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(InstancePickerActivity.this); AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(InstancePickerActivity.this);
int i = 0; int i = 0;
if (languages.size() > 0) { if (languages.size() > 0) {
Iterator<Map.Entry<String, String>> it = languages.entrySet().iterator(); Iterator<Map.Entry<String, String>> it = languages.entrySet().iterator();
@ -175,7 +174,7 @@ public class InstancePickerActivity extends AppCompatActivity {
}); });
} }
if (peertubeInformation != null && peertubeInformation.getLanguages() != null) { if (peertubeInformation != null && peertubeInformation.getCategories() != null) {
LinkedHashMap<Integer, String> categories = new LinkedHashMap<>(peertubeInformation.getCategories()); LinkedHashMap<Integer, String> categories = new LinkedHashMap<>(peertubeInformation.getCategories());
checkedItemsCategory = new boolean[categories.size()]; checkedItemsCategory = new boolean[categories.size()];
itemsLabelCategory = new String[categories.size()]; itemsLabelCategory = new String[categories.size()];

View File

@ -16,49 +16,54 @@ package app.fedilab.fedilabtube;
import android.os.Bundle; import android.os.Bundle;
import android.view.MenuItem; import android.view.MenuItem;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentTransaction; import androidx.fragment.app.FragmentTransaction;
import app.fedilab.fedilabtube.client.data.PlaylistData;
import app.fedilab.fedilabtube.fragment.DisplayVideosFragment; import app.fedilab.fedilabtube.fragment.DisplayVideosFragment;
import app.fedilab.fedilabtube.helper.Helper;
import app.fedilab.fedilabtube.viewmodel.TimelineVM; import app.fedilab.fedilabtube.viewmodel.TimelineVM;
import es.dmoral.toasty.Toasty;
public class MyVideosActivity extends AppCompatActivity { public class LocalPlaylistsActivity extends AppCompatActivity {
private TimelineVM.TimelineType type;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search_result);
if (getSupportActionBar() != null) if (getSupportActionBar() != null)
getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true);
setContentView(R.layout.activity_playlists);
PlaylistData.Playlist playlist;
Bundle b = getIntent().getExtras(); Bundle b = getIntent().getExtras();
if (b != null) if (b != null) {
type = (TimelineVM.TimelineType) b.get("type"); playlist = b.getParcelable("playlist");
if (playlist == null) {
if (type == TimelineVM.TimelineType.MY_VIDEOS) { return;
setTitle(R.string.my_videos);
} else if (type == TimelineVM.TimelineType.SUBSCRIBTIONS) {
setTitle(R.string.subscriptions);
} else if (type == TimelineVM.TimelineType.HISTORY) {
setTitle(R.string.my_history);
} else if (type == TimelineVM.TimelineType.MOST_LIKED) {
setTitle(R.string.title_most_liked);
} }
} else {
Toasty.error(LocalPlaylistsActivity.this, getString(R.string.toast_error), Toast.LENGTH_LONG).show();
return;
}
setTitle(playlist.getDisplayName());
if (savedInstanceState == null) { if (savedInstanceState == null) {
DisplayVideosFragment displayVideosFragment = new DisplayVideosFragment(); DisplayVideosFragment displayVideosFragment = new DisplayVideosFragment();
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putSerializable("type", type); bundle.putSerializable(Helper.TIMELINE_TYPE, TimelineVM.TimelineType.VIDEOS_IN_LOCAL_PLAYLIST);
bundle.putSerializable("playlistId", playlist.getUuid());
displayVideosFragment.setArguments(bundle); displayVideosFragment.setArguments(bundle);
FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.container, displayVideosFragment).commit(); ft.add(R.id.nav_host_fragment, displayVideosFragment).commit();
} }
} }

View File

@ -22,20 +22,18 @@ import android.text.SpannableString;
import android.text.Spanned; import android.text.Spanned;
import android.text.style.ForegroundColorSpan; import android.text.style.ForegroundColorSpan;
import android.text.style.UnderlineSpan; import android.text.style.UnderlineSpan;
import android.util.Patterns;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import com.google.android.material.textfield.TextInputEditText; import java.net.MalformedURLException;
import com.google.android.material.textfield.TextInputLayout; import java.net.URL;
import java.util.Arrays; import java.util.Arrays;
import app.fedilab.fedilabtube.client.RetrofitPeertubeAPI; import app.fedilab.fedilabtube.client.RetrofitPeertubeAPI;
@ -43,6 +41,7 @@ import app.fedilab.fedilabtube.client.entities.Error;
import app.fedilab.fedilabtube.client.entities.Oauth; import app.fedilab.fedilabtube.client.entities.Oauth;
import app.fedilab.fedilabtube.client.entities.OauthParams; import app.fedilab.fedilabtube.client.entities.OauthParams;
import app.fedilab.fedilabtube.client.entities.Token; import app.fedilab.fedilabtube.client.entities.Token;
import app.fedilab.fedilabtube.databinding.ActivityLoginBinding;
import app.fedilab.fedilabtube.helper.Helper; import app.fedilab.fedilabtube.helper.Helper;
import es.dmoral.toasty.Toasty; import es.dmoral.toasty.Toasty;
@ -54,29 +53,26 @@ public class LoginActivity extends AppCompatActivity {
private static String client_id; private static String client_id;
private static String client_secret; private static String client_secret;
private EditText login_uid; private ActivityLoginBinding binding;
private EditText login_passwd;
private Button connectionButton;
private TextInputEditText login_instance;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
binding = ActivityLoginBinding.inflate(getLayoutInflater());
View view = binding.getRoot();
setContentView(view);
setContentView(R.layout.activity_login);
if (getSupportActionBar() != null) if (getSupportActionBar() != null)
getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true);
TextView create_an_account_peertube = findViewById(R.id.create_an_account_peertube);
SpannableString content_create = new SpannableString(getString(R.string.join_peertube)); SpannableString content_create = new SpannableString(getString(R.string.join_peertube));
content_create.setSpan(new UnderlineSpan(), 0, content_create.length(), 0); content_create.setSpan(new UnderlineSpan(), 0, content_create.length(), 0);
content_create.setSpan(new ForegroundColorSpan(ContextCompat.getColor(LoginActivity.this, Helper.getColorAccent())), 0, content_create.length(), content_create.setSpan(new ForegroundColorSpan(ContextCompat.getColor(LoginActivity.this, Helper.getColorAccent())), 0, content_create.length(),
Spanned.SPAN_INCLUSIVE_EXCLUSIVE); Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
create_an_account_peertube.setText(content_create); binding.createAnAccountPeertube.setText(content_create, TextView.BufferType.SPANNABLE);
create_an_account_peertube.setOnClickListener(v -> { binding.createAnAccountPeertube.setOnClickListener(v -> {
Intent mainActivity = new Intent(LoginActivity.this, PeertubeRegisterActivity.class); Intent mainActivity = new Intent(LoginActivity.this, PeertubeRegisterActivity.class);
Bundle b = new Bundle(); Bundle b = new Bundle();
mainActivity.putExtras(b); mainActivity.putExtras(b);
@ -84,37 +80,34 @@ public class LoginActivity extends AppCompatActivity {
}); });
TextInputLayout login_instance_container = findViewById(R.id.login_instance_container);
login_instance = findViewById(R.id.login_instance);
if (BuildConfig.full_instances) { if (BuildConfig.full_instances) {
login_instance_container.setVisibility(View.VISIBLE); binding.loginInstanceContainer.setVisibility(View.VISIBLE);
} }
login_uid = findViewById(R.id.login_uid);
login_passwd = findViewById(R.id.login_passwd);
if (Helper.isTablet(LoginActivity.this)) { if (Helper.isTablet(LoginActivity.this)) {
TextInputLayout login_uid_container = findViewById(R.id.login_uid_container);
ViewGroup.LayoutParams layoutParamsU = login_uid_container.getLayoutParams();
layoutParamsU.width = (int) Helper.convertDpToPixel(300, LoginActivity.this);
login_uid_container.setLayoutParams(layoutParamsU);
TextInputLayout login_passwd_container = findViewById(R.id.login_passwd_container); ViewGroup.LayoutParams layoutParamsI = binding.loginInstanceContainer.getLayoutParams();
ViewGroup.LayoutParams layoutParamsP = login_passwd_container.getLayoutParams(); layoutParamsI.width = (int) Helper.convertDpToPixel(300, LoginActivity.this);
binding.loginInstanceContainer.setLayoutParams(layoutParamsI);
ViewGroup.LayoutParams layoutParamsU = binding.loginUidContainer.getLayoutParams();
layoutParamsU.width = (int) Helper.convertDpToPixel(300, LoginActivity.this);
binding.loginUidContainer.setLayoutParams(layoutParamsU);
ViewGroup.LayoutParams layoutParamsP = binding.loginPasswdContainer.getLayoutParams();
layoutParamsP.width = (int) Helper.convertDpToPixel(300, LoginActivity.this); layoutParamsP.width = (int) Helper.convertDpToPixel(300, LoginActivity.this);
login_passwd_container.setLayoutParams(layoutParamsP); binding.loginPasswdContainer.setLayoutParams(layoutParamsP);
} }
connectionButton = findViewById(R.id.login_button);
if (!BuildConfig.full_instances) { if (!BuildConfig.full_instances) {
login_uid.setOnFocusChangeListener((v, hasFocus) -> { binding.loginUid.setOnFocusChangeListener((v, hasFocus) -> {
if (!hasFocus) { if (!hasFocus) {
if (android.util.Patterns.EMAIL_ADDRESS.matcher(login_uid.getText().toString().trim()).matches()) { if (binding.loginUid.getText() != null && android.util.Patterns.EMAIL_ADDRESS.matcher(binding.loginUid.getText().toString().trim()).matches()) {
String[] emailArray = login_uid.getText().toString().split("@"); String[] emailArray = binding.loginUid.getText().toString().split("@");
if (emailArray.length > 1 && Arrays.asList(Helper.openid).contains(emailArray[1])) { if (emailArray.length > 1 && Arrays.asList(Helper.openid).contains(emailArray[1])) {
connectionButton.callOnClick(); binding.loginButton.callOnClick();
} }
} }
} }
@ -122,36 +115,55 @@ public class LoginActivity extends AppCompatActivity {
} }
connectionButton.setOnClickListener(v -> { binding.loginButton.setOnClickListener(v -> {
if (login_uid.getText().toString().contains("@") && !android.util.Patterns.EMAIL_ADDRESS.matcher(login_uid.getText().toString().trim()).matches()) { if (binding.loginUid.getText() != null && binding.loginUid.getText().toString().contains("@") && !android.util.Patterns.EMAIL_ADDRESS.matcher(binding.loginUid.getText().toString().trim()).matches()) {
Toasty.error(LoginActivity.this, getString(R.string.email_error)).show(); Toasty.error(LoginActivity.this, getString(R.string.email_error)).show();
return; return;
} }
connectionButton.setEnabled(false); binding.loginButton.setEnabled(false);
String instance, host; String instance, host;
if (!BuildConfig.full_instances) { if (!BuildConfig.full_instances) {
String[] emailArray = login_uid.getText().toString().split("@"); String[] emailArray = binding.loginUid.getText().toString().split("@");
if (emailArray.length > 1 && !Arrays.asList(Helper.valideEmails).contains(emailArray[1])) { if (emailArray.length > 1 && !Arrays.asList(Helper.valideEmails).contains(emailArray[1])) {
Toasty.error(LoginActivity.this, getString(R.string.email_error_domain, emailArray[1])).show(); Toasty.error(LoginActivity.this, getString(R.string.email_error_domain, emailArray[1])).show();
binding.loginButton.setEnabled(true);
return; return;
} }
host = emailArray[1]; host = emailArray[1];
instance = Helper.getPeertubeUrl(host); instance = Helper.getPeertubeUrl(host);
} else { } else {
if (login_instance == null || login_instance.getText() == null || login_instance.getText().toString().trim().length() == 0) { if (binding.loginInstance.getText() == null || binding.loginInstance.getText().toString().trim().length() == 0) {
Toasty.error(LoginActivity.this, getString(R.string.not_valide_instance)).show(); Toasty.error(LoginActivity.this, getString(R.string.not_valide_instance)).show();
binding.loginButton.setEnabled(true);
return; return;
} }
instance = host = login_instance.getText().toString().trim().toLowerCase(); instance = host = binding.loginInstance.getText().toString().trim().toLowerCase();
} }
if (instance.startsWith("http")) {
try {
URL url = new URL(instance);
instance = url.getHost();
host = instance;
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
if (!Patterns.WEB_URL.matcher("https://" + instance).matches()) {
Toasty.error(LoginActivity.this, getString(R.string.not_valide_instance)).show();
binding.loginButton.setEnabled(true);
return;
}
String finalInstance = instance;
String finalHost = host;
if (Arrays.asList(Helper.openid).contains(host) && !BuildConfig.full_instances) { if (Arrays.asList(Helper.openid).contains(host) && !BuildConfig.full_instances) {
new Thread(() -> { new Thread(() -> {
try { try {
Oauth oauth = new RetrofitPeertubeAPI(LoginActivity.this, instance, null).oauthClient(null, null, null, null); Oauth oauth = new RetrofitPeertubeAPI(LoginActivity.this, finalInstance, null).oauthClient(null, null, null, null);
if (oauth == null) { if (oauth == null) {
runOnUiThread(() -> { runOnUiThread(() -> {
connectionButton.setEnabled(true); binding.loginButton.setEnabled(true);
Toasty.error(LoginActivity.this, getString(R.string.client_error), Toast.LENGTH_LONG).show(); Toasty.error(LoginActivity.this, getString(R.string.client_error), Toast.LENGTH_LONG).show();
}); });
return; return;
@ -165,14 +177,14 @@ public class LoginActivity extends AppCompatActivity {
editor.apply(); editor.apply();
Intent intent = new Intent(LoginActivity.this, WebviewConnectActivity.class); Intent intent = new Intent(LoginActivity.this, WebviewConnectActivity.class);
Bundle b = new Bundle(); Bundle b = new Bundle();
b.putString("url", "https://" + Helper.getPeertubeUrl(host) + "/plugins/auth-openid-connect/0.0.1/auth/openid-connect"); b.putString("url", "https://" + Helper.getPeertubeUrl(finalHost) + "/plugins/auth-openid-connect/0.0.1/auth/openid-connect");
intent.putExtras(b); intent.putExtras(b);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent); startActivity(intent);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
runOnUiThread(() -> { runOnUiThread(() -> {
connectionButton.setEnabled(true); binding.loginButton.setEnabled(true);
Toasty.error(LoginActivity.this, getString(R.string.toast_error), Toast.LENGTH_LONG).show(); Toasty.error(LoginActivity.this, getString(R.string.toast_error), Toast.LENGTH_LONG).show();
}); });
} }
@ -180,10 +192,10 @@ public class LoginActivity extends AppCompatActivity {
}).start(); }).start();
} else { } else {
new Thread(() -> { new Thread(() -> {
Oauth oauth = new RetrofitPeertubeAPI(LoginActivity.this, instance, null).oauthClient(Helper.CLIENT_NAME_VALUE, Helper.WEBSITE_VALUE, Helper.OAUTH_SCOPES_PEERTUBE, Helper.WEBSITE_VALUE); Oauth oauth = new RetrofitPeertubeAPI(LoginActivity.this, finalInstance, null).oauthClient(Helper.CLIENT_NAME_VALUE, Helper.WEBSITE_VALUE, Helper.OAUTH_SCOPES_PEERTUBE, Helper.WEBSITE_VALUE);
if (oauth == null) { if (oauth == null) {
runOnUiThread(() -> { runOnUiThread(() -> {
connectionButton.setEnabled(true); binding.loginButton.setEnabled(true);
Toasty.error(LoginActivity.this, getString(R.string.client_error), Toast.LENGTH_LONG).show(); Toasty.error(LoginActivity.this, getString(R.string.client_error), Toast.LENGTH_LONG).show();
}); });
return; return;
@ -202,19 +214,22 @@ public class LoginActivity extends AppCompatActivity {
oauthParams.setClient_secret(client_secret); oauthParams.setClient_secret(client_secret);
oauthParams.setGrant_type("password"); oauthParams.setGrant_type("password");
oauthParams.setScope("user"); oauthParams.setScope("user");
oauthParams.setUsername(login_uid.getText().toString().trim()); oauthParams.setUsername(binding.loginUid.getText().toString().trim());
oauthParams.setPassword(login_passwd.getText().toString()); if (binding.loginPasswd.getText() != null) {
oauthParams.setPassword(binding.loginPasswd.getText().toString());
}
try { try {
Token token = new RetrofitPeertubeAPI(LoginActivity.this, instance, null).manageToken(oauthParams); Token token = new RetrofitPeertubeAPI(LoginActivity.this, finalInstance, null).manageToken(oauthParams);
proceedLogin(token, host); proceedLogin(token, finalHost);
} catch (final Exception | Error e) { } catch (final Exception | Error e) {
oauthParams.setUsername(login_uid.getText().toString().toLowerCase().trim()); oauthParams.setUsername(binding.loginUid.getText().toString().toLowerCase().trim());
try { try {
Token token = new RetrofitPeertubeAPI(LoginActivity.this, instance, null).manageToken(oauthParams); Token token = new RetrofitPeertubeAPI(LoginActivity.this, finalInstance, null).manageToken(oauthParams);
proceedLogin(token, host); proceedLogin(token, finalHost);
} catch (Error error) { } catch (Error error) {
Error.displayError(LoginActivity.this, error); Error.displayError(LoginActivity.this, error);
error.printStackTrace(); error.printStackTrace();
runOnUiThread(() -> binding.loginButton.setEnabled(true));
} }
} }
}).start(); }).start();
@ -235,7 +250,7 @@ public class LoginActivity extends AppCompatActivity {
//Update the account with the token; //Update the account with the token;
updateCredential(LoginActivity.this, token.getAccess_token(), client_id, client_secret, token.getRefresh_token(), host); updateCredential(LoginActivity.this, token.getAccess_token(), client_id, client_secret, token.getRefresh_token(), host);
} else { } else {
connectionButton.setEnabled(true); binding.loginButton.setEnabled(true);
} }
}); });
} }

View File

@ -20,49 +20,62 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View;
import android.widget.EditText; import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.SearchView; import androidx.appcompat.widget.SearchView;
import androidx.appcompat.widget.Toolbar; import androidx.appcompat.widget.Toolbar;
import androidx.navigation.NavController; import androidx.fragment.app.Fragment;
import androidx.navigation.NavGraph; import androidx.fragment.app.FragmentManager;
import androidx.navigation.NavInflater;
import androidx.navigation.Navigation;
import androidx.navigation.fragment.NavHostFragment;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;
import com.google.android.material.bottomnavigation.BottomNavigationView; import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.kobakei.ratethisapp.RateThisApp;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.TreeSet; import java.util.TreeSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import app.fedilab.fedilabtube.client.RetrofitPeertubeAPI; import app.fedilab.fedilabtube.client.RetrofitPeertubeAPI;
import app.fedilab.fedilabtube.client.data.AccountData.Account; import app.fedilab.fedilabtube.client.data.AccountData.Account;
import app.fedilab.fedilabtube.client.data.InstanceData;
import app.fedilab.fedilabtube.client.entities.Error; import app.fedilab.fedilabtube.client.entities.Error;
import app.fedilab.fedilabtube.client.entities.OauthParams; import app.fedilab.fedilabtube.client.entities.OauthParams;
import app.fedilab.fedilabtube.client.entities.PeertubeInformation; import app.fedilab.fedilabtube.client.entities.PeertubeInformation;
import app.fedilab.fedilabtube.client.entities.Token; import app.fedilab.fedilabtube.client.entities.Token;
import app.fedilab.fedilabtube.client.entities.UserMe; import app.fedilab.fedilabtube.client.entities.UserMe;
import app.fedilab.fedilabtube.client.entities.UserSettings;
import app.fedilab.fedilabtube.client.entities.WellKnownNodeinfo; import app.fedilab.fedilabtube.client.entities.WellKnownNodeinfo;
import app.fedilab.fedilabtube.fragment.DisplayOverviewFragment;
import app.fedilab.fedilabtube.fragment.DisplayVideosFragment;
import app.fedilab.fedilabtube.helper.Helper; import app.fedilab.fedilabtube.helper.Helper;
import app.fedilab.fedilabtube.helper.PlaylistExportHelper;
import app.fedilab.fedilabtube.helper.SwitchAccountHelper;
import app.fedilab.fedilabtube.services.RetrieveInfoService; import app.fedilab.fedilabtube.services.RetrieveInfoService;
import app.fedilab.fedilabtube.sqlite.AccountDAO; import app.fedilab.fedilabtube.sqlite.AccountDAO;
import app.fedilab.fedilabtube.sqlite.Sqlite; import app.fedilab.fedilabtube.sqlite.Sqlite;
import app.fedilab.fedilabtube.sqlite.StoredInstanceDAO;
import app.fedilab.fedilabtube.viewmodel.TimelineVM; import app.fedilab.fedilabtube.viewmodel.TimelineVM;
import es.dmoral.toasty.Toasty; import es.dmoral.toasty.Toasty;
import static app.fedilab.fedilabtube.MainActivity.TypeOfConnection.NORMAL;
import static app.fedilab.fedilabtube.MainActivity.TypeOfConnection.SURFING;
import static app.fedilab.fedilabtube.helper.Helper.academies; import static app.fedilab.fedilabtube.helper.Helper.academies;
public class MainActivity extends AppCompatActivity { public class MainActivity extends AppCompatActivity {
@ -70,6 +83,111 @@ public class MainActivity extends AppCompatActivity {
public static PeertubeInformation peertubeInformation; public static PeertubeInformation peertubeInformation;
public static int PICK_INSTANCE = 5641; public static int PICK_INSTANCE = 5641;
public static int PICK_INSTANCE_SURF = 5642;
public static UserMe userMe;
public static TypeOfConnection typeOfConnection;
final FragmentManager fm = getSupportFragmentManager();
Fragment active;
private DisplayVideosFragment recentFragment, locaFragment, trendingFragment, subscriptionFragment, mostLikedFragment;
private DisplayOverviewFragment overviewFragment;
private final BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
= item -> {
DisplayVideosFragment displayVideosFragment = null;
int itemId = item.getItemId();
if (itemId == R.id.navigation_subscription) {
displayVideosFragment = subscriptionFragment;
setTitleCustom(R.string.subscriptions);
} else if (itemId == R.id.navigation_trending) {
setTitleCustom(R.string.title_trending);
displayVideosFragment = trendingFragment;
} else if (itemId == R.id.navigation_most_liked) {
setTitleCustom(R.string.title_most_liked);
displayVideosFragment = mostLikedFragment;
} else if (itemId == R.id.navigation_recently_added) {
setTitleCustom(R.string.title_recently_added);
displayVideosFragment = recentFragment;
} else if (itemId == R.id.navigation_local) {
setTitleCustom(R.string.title_local);
displayVideosFragment = locaFragment;
} else if (itemId == R.id.navigation_discover) {
setTitleCustom(R.string.title_discover);
fm.beginTransaction().hide(active).show(overviewFragment).commit();
active = overviewFragment;
return true;
}
if (displayVideosFragment != null) {
fm.beginTransaction().hide(active).show(displayVideosFragment).commit();
active = displayVideosFragment;
return true;
} else {
return false;
}
};
@SuppressLint("ApplySharedPref")
public static void showRadioButtonDialogFullInstances(Activity activity, boolean storeInDb) {
final SharedPreferences sharedpreferences = activity.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
AlertDialog.Builder alt_bld = new AlertDialog.Builder(activity);
alt_bld.setTitle(R.string.instance_choice);
String instance = Helper.getLiveInstance(activity);
final EditText input = new EditText(activity);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT);
input.setLayoutParams(lp);
alt_bld.setView(input);
input.setText(instance);
alt_bld.setPositiveButton(R.string.validate,
(dialog, which) -> new Thread(() -> {
try {
String newInstance = input.getText().toString().trim();
WellKnownNodeinfo.NodeInfo instanceNodeInfo = new RetrofitPeertubeAPI(activity, newInstance, null).getNodeInfo();
if (instanceNodeInfo.getSoftware() != null && instanceNodeInfo.getSoftware().getName().trim().toLowerCase().compareTo("peertube") == 0) {
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString(Helper.PREF_INSTANCE, newInstance);
editor.commit();
if (storeInDb) {
newInstance = newInstance.trim().toLowerCase();
InstanceData.AboutInstance aboutInstance = new RetrofitPeertubeAPI(activity, newInstance, null).getAboutInstance();
SQLiteDatabase db = Sqlite.getInstance(activity.getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
new StoredInstanceDAO(activity, db).insertInstance(aboutInstance, newInstance);
activity.runOnUiThread(() -> {
dialog.dismiss();
Helper.logoutNoRemoval(activity);
});
} else {
activity.runOnUiThread(() -> {
dialog.dismiss();
Intent intent = new Intent(activity, MainActivity.class);
activity.startActivity(intent);
});
}
} else {
activity.runOnUiThread(() -> Toasty.error(activity, activity.getString(R.string.not_valide_instance), Toast.LENGTH_LONG).show());
}
} catch (Exception e) {
e.printStackTrace();
}
}).start());
alt_bld.setNegativeButton(R.string.cancel, (dialog, which) -> dialog.dismiss());
alt_bld.setNeutralButton(R.string.help, (dialog, which) -> {
Intent intent = new Intent(activity, InstancePickerActivity.class);
if (storeInDb) {
activity.startActivityForResult(intent, PICK_INSTANCE_SURF);
} else {
activity.startActivityForResult(intent, PICK_INSTANCE);
}
});
AlertDialog alert = alt_bld.create();
alert.show();
}
private void setTitleCustom(int titleRId) {
Toolbar toolbar = findViewById(R.id.toolbar);
TextView mTitle = toolbar.findViewById(R.id.toolbar_title);
mTitle.setText(getString(titleRId));
}
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
@ -79,37 +197,136 @@ public class MainActivity extends AppCompatActivity {
Toolbar toolbar = findViewById(R.id.toolbar); Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar); setSupportActionBar(toolbar);
typeOfConnection = TypeOfConnection.UNKNOWN;
BottomNavigationView navView = findViewById(R.id.nav_view); BottomNavigationView navView = findViewById(R.id.nav_view);
navView.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayShowTitleEnabled(false);
}
checkIfConnectedUsers();
Fragment fragment = getSupportFragmentManager().findFragmentByTag("5");
if (fragment != null)
getSupportFragmentManager().beginTransaction().remove(fragment).commit();
fragment = getSupportFragmentManager().findFragmentByTag("4");
if (fragment != null)
getSupportFragmentManager().beginTransaction().remove(fragment).commit();
fragment = getSupportFragmentManager().findFragmentByTag("3");
if (fragment != null)
getSupportFragmentManager().beginTransaction().remove(fragment).commit();
fragment = getSupportFragmentManager().findFragmentByTag("2");
if (fragment != null)
getSupportFragmentManager().beginTransaction().remove(fragment).commit();
fragment = getSupportFragmentManager().findFragmentByTag("1");
if (fragment != null)
getSupportFragmentManager().beginTransaction().remove(fragment).commit();
recentFragment = new DisplayVideosFragment();
Bundle bundle = new Bundle();
bundle.putSerializable(Helper.TIMELINE_TYPE, TimelineVM.TimelineType.RECENT);
recentFragment.setArguments(bundle);
locaFragment = new DisplayVideosFragment();
bundle = new Bundle();
bundle.putSerializable(Helper.TIMELINE_TYPE, TimelineVM.TimelineType.LOCAL);
locaFragment.setArguments(bundle);
trendingFragment = new DisplayVideosFragment();
bundle = new Bundle();
bundle.putSerializable(Helper.TIMELINE_TYPE, TimelineVM.TimelineType.TRENDING);
trendingFragment.setArguments(bundle);
subscriptionFragment = new DisplayVideosFragment();
bundle = new Bundle();
bundle.putSerializable(Helper.TIMELINE_TYPE, TimelineVM.TimelineType.SUBSCRIBTIONS);
subscriptionFragment.setArguments(bundle);
mostLikedFragment = new DisplayVideosFragment();
bundle = new Bundle();
bundle.putSerializable(Helper.TIMELINE_TYPE, TimelineVM.TimelineType.MOST_LIKED);
mostLikedFragment.setArguments(bundle);
overviewFragment = new DisplayOverviewFragment();
if (active == null) {
active = overviewFragment;
}
if (!Helper.isLoggedIn(MainActivity.this)) {
fm.beginTransaction().add(R.id.nav_host_fragment, locaFragment, "5").hide(locaFragment).commit();
fm.beginTransaction().add(R.id.nav_host_fragment, recentFragment, "4").hide(recentFragment).commit();
fm.beginTransaction().add(R.id.nav_host_fragment, mostLikedFragment, "3").hide(mostLikedFragment).commit();
fm.beginTransaction().add(R.id.nav_host_fragment, trendingFragment, "2").hide(trendingFragment).commit();
fm.beginTransaction().add(R.id.nav_host_fragment, overviewFragment, "1").commit();
}
toolbar.setOnClickListener(v -> {
if (active instanceof DisplayVideosFragment) {
((DisplayVideosFragment) active).scrollToTop();
} else if (active instanceof DisplayOverviewFragment) {
((DisplayOverviewFragment) active).scrollToTop();
}
});
setTitleCustom(R.string.title_discover);
if (Helper.isLoggedIn(MainActivity.this)) { if (Helper.isLoggedIn(MainActivity.this)) {
navView.inflateMenu(R.menu.bottom_nav_menu_connected); navView.inflateMenu(R.menu.bottom_nav_menu_connected);
new Thread(() -> {
final SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); final SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
String tokenStr = sharedpreferences.getString(Helper.PREF_KEY_OAUTH_TOKEN, null); String tokenStr = sharedpreferences.getString(Helper.PREF_KEY_OAUTH_TOKEN, null);
String instance = Helper.getLiveInstance(MainActivity.this); String instance = Helper.getLiveInstance(MainActivity.this);
SQLiteDatabase db = Sqlite.getInstance(getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); SQLiteDatabase db = Sqlite.getInstance(getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
String instanceShar = sharedpreferences.getString(Helper.PREF_INSTANCE, null);
String userIdShar = sharedpreferences.getString(Helper.PREF_KEY_ID, null);
Account account = new AccountDAO(MainActivity.this, db).getAccountByToken(tokenStr); Account account = new AccountDAO(MainActivity.this, db).getAccountByToken(tokenStr);
if (account == null) {
account = new AccountDAO(MainActivity.this, db).getAccountByIdInstance(userIdShar, instanceShar);
}
if (account != null) { if (account != null) {
Account finalAccount = account;
OauthParams oauthParams = new OauthParams(); OauthParams oauthParams = new OauthParams();
oauthParams.setGrant_type("refresh_token"); oauthParams.setGrant_type("refresh_token");
oauthParams.setClient_id(account.getClient_id()); oauthParams.setClient_id(account.getClient_id());
oauthParams.setClient_secret(account.getClient_secret()); oauthParams.setClient_secret(account.getClient_secret());
oauthParams.setRefresh_token(account.getRefresh_token()); oauthParams.setRefresh_token(account.getRefresh_token());
oauthParams.setAccess_token(account.getToken()); oauthParams.setAccess_token(account.getToken());
new Thread(() -> {
try { try {
Token token = new RetrofitPeertubeAPI(MainActivity.this).manageToken(oauthParams); Token token = new RetrofitPeertubeAPI(MainActivity.this).manageToken(oauthParams);
if (token == null) { if (token == null && Helper.instanceOnline(instance)) {
runOnUiThread(() -> Helper.logoutCurrentUser(MainActivity.this, account)); runOnUiThread(() -> Helper.logoutCurrentUser(MainActivity.this, finalAccount));
return;
} else if (token == null) {
return; return;
} }
UserMe userMe = new RetrofitPeertubeAPI(MainActivity.this, instance, token.getAccess_token()).verifyCredentials(); runOnUiThread(() -> {
//To avoid a token issue with subscriptions, adding fragment is done when the token is refreshed.
new Handler().post(() -> {
fm.beginTransaction().add(R.id.nav_host_fragment, locaFragment, "5").hide(locaFragment).commit();
fm.beginTransaction().add(R.id.nav_host_fragment, recentFragment, "4").hide(recentFragment).commitAllowingStateLoss();
fm.beginTransaction().add(R.id.nav_host_fragment, trendingFragment, "3").hide(trendingFragment).commitAllowingStateLoss();
fm.beginTransaction().add(R.id.nav_host_fragment, subscriptionFragment, "2").hide(subscriptionFragment).commitAllowingStateLoss();
fm.beginTransaction().add(R.id.nav_host_fragment, overviewFragment, "1").commitAllowingStateLoss();
});
});
userMe = new RetrofitPeertubeAPI(MainActivity.this, instance, token.getAccess_token()).verifyCredentials();
if (userMe != null && userMe.getAccount() != null) { if (userMe != null && userMe.getAccount() != null) {
new AccountDAO(MainActivity.this, db).updateAccount(userMe.getAccount()); new AccountDAO(MainActivity.this, db).updateAccount(userMe.getAccount());
SharedPreferences.Editor editor = sharedpreferences.edit(); SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString(Helper.PREF_KEY_ID, account.getId()); editor.putString(Helper.PREF_KEY_ID, account.getId());
editor.putString(Helper.PREF_KEY_NAME, account.getUsername()); editor.putString(Helper.PREF_KEY_NAME, account.getUsername());
editor.putBoolean(getString(R.string.set_autoplay_choice), userMe.isAutoPlayVideo());
editor.putBoolean(getString(R.string.set_store_in_history), userMe.isVideosHistoryEnabled());
editor.putBoolean(getString(R.string.set_autoplay_next_video_choice), userMe.isAutoPlayNextVideo());
editor.putString(getString(R.string.set_video_sensitive_choice), userMe.getNsfwPolicy());
//Sync languages from server //Sync languages from server
List<String> videoLanguageServer = userMe.getVideoLanguages(); List<String> videoLanguageServer = userMe.getVideoLanguages();
if (videoLanguageServer != null) {
Set<String> videoLanguageServerSet = new TreeSet<>(videoLanguageServer); Set<String> videoLanguageServerSet = new TreeSet<>(videoLanguageServer);
videoLanguageServerSet.addAll(videoLanguageServer); videoLanguageServerSet.addAll(videoLanguageServer);
Set<String> videoLanguageLocal = sharedpreferences.getStringSet(getString(R.string.set_video_language_choice), null); Set<String> videoLanguageLocal = sharedpreferences.getStringSet(getString(R.string.set_video_language_choice), null);
@ -119,50 +336,34 @@ public class MainActivity extends AppCompatActivity {
editor.putStringSet(getString(R.string.set_video_language_choice), videoLanguageServerSet); editor.putStringSet(getString(R.string.set_video_language_choice), videoLanguageServerSet);
editor.apply(); editor.apply();
} }
}
} catch (Error error) { } catch (Error error) {
runOnUiThread(() -> Helper.logoutCurrentUser(MainActivity.this, finalAccount));
error.printStackTrace(); error.printStackTrace();
} }
}).start();
} }
}).start();
} else { } else {
navView.inflateMenu(R.menu.bottom_nav_menu); navView.inflateMenu(R.menu.bottom_nav_menu);
} }
peertubeInformation = new PeertubeInformation();
// Passing each menu ID as a set of Ids because each peertubeInformation.setCategories(new LinkedHashMap<>());
// menu should be considered as top level destinations. peertubeInformation.setLanguages(new LinkedHashMap<>());
AppBarConfiguration appBarConfiguration; peertubeInformation.setLicences(new LinkedHashMap<>());
//Bottom menu won't be the same if the user is authenticated peertubeInformation.setPrivacies(new LinkedHashMap<>());
//When the user is authenticated, the subscription entry will be added and the local one removed. peertubeInformation.setPlaylistPrivacies(new LinkedHashMap<>());
if (Helper.isLoggedIn(MainActivity.this)) { peertubeInformation.setTranslations(new LinkedHashMap<>());
appBarConfiguration = new AppBarConfiguration.Builder(
R.id.navigation_discover, R.id.navigation_subscription, R.id.navigation_trending, R.id.navigation_local, R.id.navigation_recently_added)
.build();
} else {
appBarConfiguration = new AppBarConfiguration.Builder(
R.id.navigation_discover, R.id.navigation_trending, R.id.navigation_most_liked, R.id.navigation_recently_added, R.id.navigation_home)
.build();
}
startInForeground(); startInForeground();
NavHostFragment navHostFragment = (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment);
if (navHostFragment != null) {
NavInflater inflater = navHostFragment.getNavController().getNavInflater();
NavGraph graph;
//the menu is inflated for authenticated or not authenticated account
if (Helper.isLoggedIn(MainActivity.this)) {
graph = inflater.inflate(R.navigation.mobile_navigation_connected);
} else {
graph = inflater.inflate(R.navigation.mobile_navigation);
}
navHostFragment.getNavController().setGraph(graph);
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
NavigationUI.setupWithNavController(navView, navController);
}
}
if (BuildConfig.google_restriction && BuildConfig.full_instances) {
RateThisApp.onCreate(this);
RateThisApp.showRateDialogIfNeeded(this);
}
if (!BuildConfig.full_instances) {
PlaylistExportHelper.manageIntentUrl(MainActivity.this, getIntent());
}
}
private void startInForeground() { private void startInForeground() {
Intent notificationIntent = new Intent(this, RetrieveInfoService.class); Intent notificationIntent = new Intent(this, RetrieveInfoService.class);
@ -182,6 +383,15 @@ public class MainActivity extends AppCompatActivity {
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override @Override
public boolean onQueryTextSubmit(String query) { public boolean onQueryTextSubmit(String query) {
Pattern link = Pattern.compile("(https?://[\\da-z.-]+\\.[a-z.]{2,10})/videos/watch/(\\w{8}-\\w{4}-\\w{4}-\\w{4}-\\w{12})$");
Matcher matcherLink = link.matcher(query.trim());
if (matcherLink.find()) {
Intent intent = new Intent(MainActivity.this, PeertubeActivity.class);
intent.setData(Uri.parse(query.trim()));
startActivity(intent);
myActionMenuItem.collapseActionView();
return false;
}
Intent intent = new Intent(MainActivity.this, SearchActivity.class); Intent intent = new Intent(MainActivity.this, SearchActivity.class);
Bundle b = new Bundle(); Bundle b = new Bundle();
String search = query.trim(); String search = query.trim();
@ -200,13 +410,45 @@ public class MainActivity extends AppCompatActivity {
return false; return false;
} }
}); });
MenuItem instanceItem = menu.findItem(R.id.action_change_instance);
MenuItem uploadItem = menu.findItem(R.id.action_upload); MenuItem uploadItem = menu.findItem(R.id.action_upload);
MenuItem myVideosItem = menu.findItem(R.id.action_myvideos); MenuItem myVideosItem = menu.findItem(R.id.action_myvideos);
MenuItem playslistItem = menu.findItem(R.id.action_playlist); MenuItem playslistItem = menu.findItem(R.id.action_playlist);
MenuItem historyItem = menu.findItem(R.id.action_history); MenuItem historyItem = menu.findItem(R.id.action_history);
MenuItem mostLikedItem = menu.findItem(R.id.action_most_liked); MenuItem mostLikedItem = menu.findItem(R.id.action_most_liked);
MenuItem settingsItem = menu.findItem(R.id.action_settings); MenuItem settingsItem = menu.findItem(R.id.action_settings);
MenuItem sepiaSearchItem = menu.findItem(R.id.action_sepia_search);
MenuItem incognitoItem = menu.findItem(R.id.action_incognito);
MenuItem instanceItem = menu.findItem(R.id.action_change_instance);
MenuItem accountItem = menu.findItem(R.id.action_account);
Toolbar toolbar = findViewById(R.id.toolbar);
ImageView instances = toolbar.findViewById(R.id.instances);
if (BuildConfig.full_instances && ((Helper.isLoggedIn(MainActivity.this) && typeOfConnection == NORMAL) || typeOfConnection == SURFING)) {
instances.setVisibility(View.VISIBLE);
instances.setOnClickListener(null);
instances.setOnClickListener(v -> {
Intent intent = new Intent(MainActivity.this, ManageInstancesActivity.class);
startActivity(intent);
overridePendingTransition(R.anim.slide_in_up, R.anim.slide_out_up);
});
} else {
instances.setVisibility(View.GONE);
}
switch (typeOfConnection) {
case UNKNOWN:
instanceItem.setVisible(false);
accountItem.setVisible(false);
uploadItem.setVisible(false);
myVideosItem.setVisible(false);
playslistItem.setVisible(false);
historyItem.setVisible(false);
settingsItem.setVisible(false);
mostLikedItem.setVisible(false);
incognitoItem.setVisible(false);
break;
case NORMAL:
accountItem.setVisible(true);
if (Helper.isLoggedIn(MainActivity.this)) { if (Helper.isLoggedIn(MainActivity.this)) {
instanceItem.setVisible(false); instanceItem.setVisible(false);
uploadItem.setVisible(true); uploadItem.setVisible(true);
@ -215,24 +457,66 @@ public class MainActivity extends AppCompatActivity {
historyItem.setVisible(true); historyItem.setVisible(true);
settingsItem.setVisible(false); settingsItem.setVisible(false);
mostLikedItem.setVisible(true); mostLikedItem.setVisible(true);
incognitoItem.setVisible(true);
final SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
boolean checked = sharedpreferences.getBoolean(getString(R.string.set_store_in_history), true);
incognitoItem.setChecked(checked);
} else { } else {
instanceItem.setVisible(true); instanceItem.setVisible(true);
uploadItem.setVisible(false); uploadItem.setVisible(false);
myVideosItem.setVisible(false); myVideosItem.setVisible(false);
playslistItem.setVisible(false); playslistItem.setVisible(!BuildConfig.full_instances);
historyItem.setVisible(false); historyItem.setVisible(false);
settingsItem.setVisible(true); settingsItem.setVisible(true);
mostLikedItem.setVisible(false); mostLikedItem.setVisible(false);
incognitoItem.setVisible(false);
}
break;
case SURFING:
instanceItem.setVisible(false);
accountItem.setVisible(true);
uploadItem.setVisible(false);
myVideosItem.setVisible(false);
playslistItem.setVisible(false);
historyItem.setVisible(false);
settingsItem.setVisible(false);
mostLikedItem.setVisible(false);
incognitoItem.setVisible(false);
break;
}
if (!BuildConfig.full_instances) {
sepiaSearchItem.setVisible(false);
} }
return true; return true;
} }
private void checkIfConnectedUsers() {
new Thread(() -> {
try {
typeOfConnection = NORMAL;
if (!Helper.isLoggedIn(MainActivity.this)) {
SQLiteDatabase db = Sqlite.getInstance(getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
List<Account> accounts = new AccountDAO(MainActivity.this, db).getAllAccount();
if (accounts != null && accounts.size() > 0) {
//The user is not authenticated and there accounts in db. That means the user is surfing some other instances
typeOfConnection = TypeOfConnection.SURFING;
}
}
runOnUiThread(this::invalidateOptionsMenu);
} catch (Exception e) {
e.printStackTrace();
}
}).start();
}
@Override @Override
public boolean onOptionsItemSelected(MenuItem item) { public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.action_change_instance) { if (item.getItemId() == R.id.action_change_instance) {
if (BuildConfig.full_instances) { if (BuildConfig.full_instances) {
showRadioButtonDialogFullInstances(); showRadioButtonDialogFullInstances(MainActivity.this, false);
} else { } else {
showRadioButtonDialog(); showRadioButtonDialog();
} }
@ -242,50 +526,89 @@ public class MainActivity extends AppCompatActivity {
startActivity(intent); startActivity(intent);
} else if (item.getItemId() == R.id.action_account) { } else if (item.getItemId() == R.id.action_account) {
Intent intent; Intent intent;
if (typeOfConnection == SURFING) {
SwitchAccountHelper.switchDialog(MainActivity.this, false);
} else {
if (Helper.isLoggedIn(MainActivity.this)) { if (Helper.isLoggedIn(MainActivity.this)) {
intent = new Intent(MainActivity.this, AccountActivity.class); intent = new Intent(MainActivity.this, AccountActivity.class);
} else { } else {
intent = new Intent(MainActivity.this, LoginActivity.class); intent = new Intent(MainActivity.this, LoginActivity.class);
} }
startActivity(intent); startActivity(intent);
}
return true; return true;
} else if (item.getItemId() == R.id.action_upload) { } else if (item.getItemId() == R.id.action_upload) {
Intent intent = new Intent(MainActivity.this, PeertubeUploadActivity.class); Intent intent = new Intent(MainActivity.this, PeertubeUploadActivity.class);
startActivity(intent); startActivity(intent);
return true; return true;
} else if (item.getItemId() == R.id.action_myvideos) { } else if (item.getItemId() == R.id.action_myvideos) {
Intent intent = new Intent(MainActivity.this, MyVideosActivity.class); Intent intent = new Intent(MainActivity.this, VideosTimelineActivity.class);
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putSerializable("type", TimelineVM.TimelineType.MY_VIDEOS); bundle.putSerializable("type", TimelineVM.TimelineType.MY_VIDEOS);
intent.putExtras(bundle); intent.putExtras(bundle);
startActivity(intent); startActivity(intent);
return true; return true;
} else if (item.getItemId() == R.id.action_history) { } else if (item.getItemId() == R.id.action_history) {
Intent intent = new Intent(MainActivity.this, MyVideosActivity.class); Intent intent = new Intent(MainActivity.this, VideosTimelineActivity.class);
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putSerializable("type", TimelineVM.TimelineType.HISTORY); bundle.putSerializable("type", TimelineVM.TimelineType.HISTORY);
intent.putExtras(bundle); intent.putExtras(bundle);
startActivity(intent); startActivity(intent);
return true; return true;
} else if (item.getItemId() == R.id.action_most_liked) { } else if (item.getItemId() == R.id.action_most_liked) {
Intent intent = new Intent(MainActivity.this, MyVideosActivity.class); Intent intent = new Intent(MainActivity.this, VideosTimelineActivity.class);
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putSerializable("type", TimelineVM.TimelineType.MOST_LIKED); bundle.putSerializable("type", TimelineVM.TimelineType.MOST_LIKED);
intent.putExtras(bundle); intent.putExtras(bundle);
startActivity(intent); startActivity(intent);
return true; return true;
} else if (item.getItemId() == R.id.action_playlist) { } else if (item.getItemId() == R.id.action_playlist) {
Intent intent = new Intent(MainActivity.this, AllPlaylistsActivity.class); Intent intent;
if (Helper.isLoggedIn(MainActivity.this)) {
intent = new Intent(MainActivity.this, AllPlaylistsActivity.class);
} else {
intent = new Intent(MainActivity.this, AllLocalPlaylistsActivity.class);
}
startActivity(intent);
return true;
} else if (item.getItemId() == R.id.action_sepia_search) {
Intent intent = new Intent(MainActivity.this, SepiaSearchActivity.class);
startActivity(intent); startActivity(intent);
return true; return true;
} else if (item.getItemId() == R.id.action_about) { } else if (item.getItemId() == R.id.action_about) {
Intent intent = new Intent(MainActivity.this, AboutActivity.class); Intent intent = new Intent(MainActivity.this, AboutActivity.class);
startActivity(intent); startActivity(intent);
return true; return true;
} else if (item.getItemId() == R.id.action_incognito) {
item.setChecked(!item.isChecked());
final SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putBoolean(getString(R.string.set_store_in_history), item.isChecked());
editor.apply();
new Thread(() -> {
UserSettings userSettings = new UserSettings();
userSettings.setVideosHistoryEnabled(item.isChecked());
try {
RetrofitPeertubeAPI api = new RetrofitPeertubeAPI(MainActivity.this);
api.updateUser(userSettings);
} catch (Exception | Error e) {
e.printStackTrace();
} }
}).start();
return false;
}
return super.onOptionsItemSelected(item); return super.onOptionsItemSelected(item);
} }
public void setActive(DisplayVideosFragment displayVideosFragment) {
this.active = displayVideosFragment;
}
public void setSubscriptionFragment(DisplayVideosFragment displayVideosFragment) {
this.subscriptionFragment = displayVideosFragment;
}
@Override @Override
protected void onNewIntent(Intent intent) { protected void onNewIntent(Intent intent) {
super.onNewIntent(intent); super.onNewIntent(intent);
@ -296,9 +619,12 @@ public class MainActivity extends AppCompatActivity {
if (extras.getInt(Helper.INTENT_ACTION) == Helper.ADD_USER_INTENT) { if (extras.getInt(Helper.INTENT_ACTION) == Helper.ADD_USER_INTENT) {
recreate(); recreate();
} }
} else if (!BuildConfig.full_instances) {
PlaylistExportHelper.manageIntentUrl(MainActivity.this, intent);
} }
} }
@SuppressLint("ApplySharedPref") @SuppressLint("ApplySharedPref")
private void showRadioButtonDialog() { private void showRadioButtonDialog() {
@ -326,50 +652,6 @@ public class MainActivity extends AppCompatActivity {
alert.show(); alert.show();
} }
@SuppressLint("ApplySharedPref")
private void showRadioButtonDialogFullInstances() {
final SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
AlertDialog.Builder alt_bld = new AlertDialog.Builder(this);
alt_bld.setTitle(R.string.instance_choice);
String instance = Helper.getLiveInstance(MainActivity.this);
final EditText input = new EditText(MainActivity.this);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT);
input.setLayoutParams(lp);
alt_bld.setView(input);
input.setText(instance);
alt_bld.setPositiveButton(R.string.validate,
(dialog, which) -> new Thread(() -> {
try {
String newInstance = input.getText().toString().trim();
WellKnownNodeinfo.NodeInfo instanceNodeInfo = new RetrofitPeertubeAPI(MainActivity.this, newInstance, null).getNodeInfo();
if (instanceNodeInfo.getSoftware() != null && instanceNodeInfo.getSoftware().getName().trim().toLowerCase().compareTo("peertube") == 0) {
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString(Helper.PREF_INSTANCE, newInstance);
editor.commit();
runOnUiThread(() -> {
dialog.dismiss();
recreate();
});
} else {
runOnUiThread(() -> Toasty.error(MainActivity.this, getString(R.string.not_valide_instance), Toast.LENGTH_LONG).show());
}
} catch (Exception e) {
e.printStackTrace();
}
}).start());
alt_bld.setNegativeButton(R.string.cancel, (dialog, which) -> dialog.dismiss());
alt_bld.setNeutralButton(R.string.help, (dialog, which) -> {
Intent intent = new Intent(MainActivity.this, InstancePickerActivity.class);
startActivityForResult(intent, PICK_INSTANCE);
});
AlertDialog alert = alt_bld.create();
alert.show();
}
@SuppressLint("ApplySharedPref") @SuppressLint("ApplySharedPref")
@Override @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) { public void onActivityResult(int requestCode, int resultCode, Intent data) {
@ -380,8 +662,15 @@ public class MainActivity extends AppCompatActivity {
SharedPreferences.Editor editor = sharedpreferences.edit(); SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString(Helper.PREF_INSTANCE, String.valueOf(data.getData())); editor.putString(Helper.PREF_INSTANCE, String.valueOf(data.getData()));
editor.commit(); editor.commit();
recreate(); finish();
} }
} }
} }
public enum TypeOfConnection {
UNKNOWN,
NORMAL,
SURFING
}
} }

View File

@ -0,0 +1,130 @@
package app.fedilab.fedilabtube;
/* Copyright 2020 Thomas Schneider
*
* This file is a part of TubeLab
*
* This program is free software; you can redistribute it and/or modify it under the terms of the
* GNU General Public License as published by the Free Software Foundation; either version 3 of the
* License, or (at your option) any later version.
*
* TubeLab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
* Public License for more details.
*
* You should have received a copy of the GNU General Public License along with TubeLab; if not,
* see <http://www.gnu.org/licenses>. */
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.os.Handler;
import android.view.MenuItem;
import android.view.View;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager;
import java.util.ArrayList;
import java.util.List;
import app.fedilab.fedilabtube.client.RetrofitPeertubeAPI;
import app.fedilab.fedilabtube.client.data.InstanceData;
import app.fedilab.fedilabtube.databinding.ActivityManageInstancesBinding;
import app.fedilab.fedilabtube.drawer.AboutInstanceAdapter;
import app.fedilab.fedilabtube.helper.Helper;
import app.fedilab.fedilabtube.sqlite.Sqlite;
import app.fedilab.fedilabtube.sqlite.StoredInstanceDAO;
import app.fedilab.fedilabtube.viewmodel.InfoInstanceVM;
import static app.fedilab.fedilabtube.MainActivity.PICK_INSTANCE_SURF;
import static app.fedilab.fedilabtube.MainActivity.showRadioButtonDialogFullInstances;
public class ManageInstancesActivity extends AppCompatActivity implements AboutInstanceAdapter.AllInstancesRemoved {
private ActivityManageInstancesBinding binding;
private List<InstanceData.AboutInstance> aboutInstances;
private AboutInstanceAdapter aboutInstanceAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityManageInstancesBinding.inflate(getLayoutInflater());
View view = binding.getRoot();
setContentView(view);
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
binding.loader.setVisibility(View.VISIBLE);
binding.noAction.setVisibility(View.GONE);
binding.lvInstances.setVisibility(View.GONE);
binding.actionButton.setOnClickListener(v -> showRadioButtonDialogFullInstances(ManageInstancesActivity.this, true));
aboutInstances = new ArrayList<>();
aboutInstanceAdapter = new AboutInstanceAdapter(this.aboutInstances);
aboutInstanceAdapter.allInstancesRemoved = this;
binding.lvInstances.setAdapter(aboutInstanceAdapter);
LinearLayoutManager layoutManager
= new LinearLayoutManager(ManageInstancesActivity.this);
binding.lvInstances.setLayoutManager(layoutManager);
InfoInstanceVM viewModelInfoInstance = new ViewModelProvider(ManageInstancesActivity.this).get(InfoInstanceVM.class);
viewModelInfoInstance.getInstances().observe(ManageInstancesActivity.this, this::manageVIewInfoInstance);
}
private void manageVIewInfoInstance(List<InstanceData.AboutInstance> aboutInstances) {
binding.loader.setVisibility(View.GONE);
if (aboutInstances == null || aboutInstances.size() == 0) {
binding.noAction.setVisibility(View.VISIBLE);
binding.lvInstances.setVisibility(View.GONE);
return;
}
binding.noAction.setVisibility(View.GONE);
binding.lvInstances.setVisibility(View.VISIBLE);
this.aboutInstances.addAll(aboutInstances);
aboutInstanceAdapter.notifyItemRangeInserted(0, aboutInstances.size());
}
@Override
public void onBackPressed() {
super.onBackPressed();
overridePendingTransition(R.anim.slide_out_up, R.anim.slide_in_up_down);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
finish();
overridePendingTransition(R.anim.slide_out_up, R.anim.slide_in_up_down);
return true;
}
return super.onOptionsItemSelected(item);
}
@SuppressLint("ApplySharedPref")
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PICK_INSTANCE_SURF && resultCode == Activity.RESULT_OK) {
if (data != null && data.getData() != null) {
new Thread(() -> {
String newInstance = data.getData().toString().trim().toLowerCase();
InstanceData.AboutInstance aboutInstance = new RetrofitPeertubeAPI(ManageInstancesActivity.this, newInstance, null).getAboutInstance();
SQLiteDatabase db = Sqlite.getInstance(getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
new StoredInstanceDAO(ManageInstancesActivity.this, db).insertInstance(aboutInstance, newInstance);
runOnUiThread(() -> new Handler().post(() -> Helper.logoutNoRemoval(ManageInstancesActivity.this)));
}).start();
}
}
}
@Override
public void onAllInstancesRemoved() {
binding.noAction.setVisibility(View.VISIBLE);
binding.lvInstances.setVisibility(View.GONE);
}
}

View File

@ -0,0 +1,360 @@
package app.fedilab.fedilabtube;
/* Copyright 2020 Thomas Schneider
*
* This file is a part of TubeLab
*
* This program is free software; you can redistribute it and/or modify it under the terms of the
* GNU General Public License as published by the Free Software Foundation; either version 3 of the
* License, or (at your option) any later version.
*
* TubeLab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
* Public License for more details.
*
* You should have received a copy of the GNU General Public License along with TubeLab; if not,
* see <http://www.gnu.org/licenses>. */
import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.SwitchCompat;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.documentfile.provider.DocumentFile;
import androidx.work.WorkManager;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.request.RequestOptions;
import org.jetbrains.annotations.NotNull;
import app.fedilab.fedilabtube.client.RetrofitPeertubeAPI;
import app.fedilab.fedilabtube.client.entities.Error;
import app.fedilab.fedilabtube.client.entities.NotificationSettings;
import app.fedilab.fedilabtube.client.entities.UserMe;
import app.fedilab.fedilabtube.client.entities.UserSettings;
import app.fedilab.fedilabtube.databinding.ActivityMyAccountSettingsBinding;
import app.fedilab.fedilabtube.helper.Helper;
import app.fedilab.fedilabtube.worker.WorkHelper;
import es.dmoral.toasty.Toasty;
import static app.fedilab.fedilabtube.PeertubeUploadActivity.MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE;
import static app.fedilab.fedilabtube.worker.WorkHelper.NOTIFICATION_WORKER;
public class MyAccountActivity extends AppCompatActivity {
private static final int PICK_IMAGE = 466;
ActivityMyAccountSettingsBinding binding;
private Uri inputData;
private String fileName;
private NotificationSettings notificationSettings;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityMyAccountSettingsBinding.inflate(getLayoutInflater());
View view = binding.getRoot();
setContentView(view);
if (getSupportActionBar() != null)
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
if (MainActivity.userMe == null) {
finish();
return;
}
setTitle(String.format("@%s", MainActivity.userMe.getUsername()));
binding.displayname.setText(MainActivity.userMe.getAccount().getDisplayName());
binding.description.setText(MainActivity.userMe.getAccount().getDescription());
notificationSettings = MainActivity.userMe.getNotificationSettings();
initializeValues(notificationSettings.getAbuseStateChange(), binding.notifAbuseAcceptedApp, binding.notifAbuseAcceptedMail);
initializeValues(notificationSettings.getAbuseNewMessage(), binding.notifAbuseReceivedApp, binding.notifAbuseReceivedMail);
initializeValues(notificationSettings.getCommentMention(), binding.notifVideoMentionApp, binding.notifVideoMentionMail);
initializeValues(notificationSettings.getNewFollow(), binding.notifNewFollowersApp, binding.notifNewFollowersMail);
initializeValues(notificationSettings.getMyVideoImportFinished(), binding.notifVideoImportedApp, binding.notifVideoImportedMail);
initializeValues(notificationSettings.getMyVideoPublished(), binding.notifVideoPublishedApp, binding.notifVideoPublishedMail);
initializeValues(notificationSettings.getBlacklistOnMyVideo(), binding.notifBlockedApp, binding.notifBlockedMail);
initializeValues(notificationSettings.getNewCommentOnMyVideo(), binding.notifNewCommentApp, binding.notifNewCommentMail);
initializeValues(notificationSettings.getNewVideoFromSubscription(), binding.notifNewVideoApp, binding.notifNewVideoMail);
Helper.loadGiF(MyAccountActivity.this, MainActivity.userMe.getAccount().getAvatar() != null ? MainActivity.userMe.getAccount().getAvatar().getPath() : null, binding.profilePicture);
String[] refresh_array = getResources().getStringArray(R.array.refresh_time);
ArrayAdapter<String> refreshArray = new ArrayAdapter<>(MyAccountActivity.this,
android.R.layout.simple_spinner_dropdown_item, refresh_array);
binding.refreshTime.setAdapter(refreshArray);
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
int interval = sharedpreferences.getInt(Helper.NOTIFICATION_INTERVAL, 60);
binding.refreshTime.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
SharedPreferences.Editor editor = sharedpreferences.edit();
int time;
switch (position) {
case 1:
time = 15;
break;
case 2:
time = 30;
break;
case 3:
time = 60;
break;
case 4:
time = 120;
break;
case 5:
time = 360;
break;
case 6:
time = 720;
break;
default:
time = 0;
}
editor.putInt(Helper.NOTIFICATION_INTERVAL, time);
editor.apply();
WorkManager.getInstance(getApplicationContext()).cancelAllWorkByTag(NOTIFICATION_WORKER);
if (time > 0) {
WorkHelper.fetchNotifications(getApplication(), time);
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
int position = 0;
switch (interval) {
case 0:
position = 0;
break;
case 15:
position = 1;
break;
case 30:
position = 2;
break;
case 60:
position = 3;
break;
case 120:
position = 4;
break;
case 360:
position = 5;
break;
case 720:
position = 6;
break;
}
binding.refreshTime.setSelection(position, false);
binding.selectFile.setOnClickListener(v -> {
if (ContextCompat.checkSelfPermission(MyAccountActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) !=
PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MyAccountActivity.this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);
return;
}
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
String[] mimetypes = {"image/*"};
intent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);
startActivityForResult(intent, PICK_IMAGE);
});
}
@Override
public boolean onCreateOptionsMenu(@NotNull Menu menu) {
getMenuInflater().inflate(R.menu.main_my_account, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
finish();
return true;
} else if (item.getItemId() == R.id.action_validate) {
item.setEnabled(false);
new Thread(() -> {
UserSettings userSettings = new UserSettings();
userSettings.setNotificationSettings(notificationSettings);
if (binding.displayname.getText() != null) {
userSettings.setDisplayName(binding.displayname.getText().toString().trim());
}
if (binding.description.getText() != null) {
userSettings.setDescription(binding.description.getText().toString().trim());
}
if (inputData != null) {
userSettings.setAvatarfile(inputData);
userSettings.setFileName(fileName);
}
try {
RetrofitPeertubeAPI api = new RetrofitPeertubeAPI(MyAccountActivity.this);
UserMe.AvatarResponse avatarResponse = api.updateUser(userSettings);
MainActivity.userMe.getAccount().setDisplayName(binding.displayname.getText().toString().trim());
MainActivity.userMe.getAccount().setDescription(binding.description.getText().toString().trim());
if (avatarResponse != null && avatarResponse.getAvatar() != null) {
MainActivity.userMe.getAccount().setAvatar(avatarResponse.getAvatar());
}
Handler mainHandler = new Handler(Looper.getMainLooper());
Runnable myRunnable = () -> {
Toasty.info(MyAccountActivity.this, getString(R.string.account_updated), Toasty.LENGTH_LONG).show();
item.setEnabled(true);
};
mainHandler.post(myRunnable);
} catch (Exception | Error e) {
Handler mainHandler = new Handler(Looper.getMainLooper());
Runnable myRunnable = () -> {
Toasty.error(MyAccountActivity.this, getString(R.string.toast_error), Toasty.LENGTH_LONG).show();
item.setEnabled(true);
};
mainHandler.post(myRunnable);
}
}).start();
}
return super.onOptionsItemSelected(item);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PICK_IMAGE && resultCode == Activity.RESULT_OK) {
if (data == null || data.getData() == null) {
Toasty.error(MyAccountActivity.this, getString(R.string.toot_select_image_error), Toast.LENGTH_LONG).show();
return;
}
inputData = data.getData();
DocumentFile documentFile = DocumentFile.fromSingleUri(this, inputData);
if (documentFile != null) {
fileName = documentFile.getName();
}
Glide.with(MyAccountActivity.this)
.load(inputData)
.thumbnail(0.1f)
.apply(new RequestOptions().transform(new CenterCrop(), new RoundedCorners(10)))
.into(binding.profilePicture);
}
}
private void initializeValues(int value, SwitchCompat app, SwitchCompat email) {
switch (value) {
case 1:
app.setChecked(true);
email.setChecked(false);
break;
case 2:
app.setChecked(false);
email.setChecked(true);
break;
case 3:
app.setChecked(true);
email.setChecked(true);
break;
default:
app.setChecked(false);
email.setChecked(false);
}
app.setOnCheckedChangeListener((compoundButton, checked) -> {
int id = app.getId();
if (id == R.id.notif_new_video_app) {
notificationSettings.setNewVideoFromSubscription(getNewAppCheckedValue(checked, email));
} else if (id == R.id.notif_new_comment_app) {
notificationSettings.setNewCommentOnMyVideo(getNewAppCheckedValue(checked, email));
} else if (id == R.id.notif_blocked_app) {
notificationSettings.setBlacklistOnMyVideo(getNewAppCheckedValue(checked, email));
} else if (id == R.id.notif_video_published_app) {
notificationSettings.setMyVideoPublished(getNewAppCheckedValue(checked, email));
} else if (id == R.id.notif_video_imported_app) {
notificationSettings.setMyVideoImportFinished(getNewAppCheckedValue(checked, email));
} else if (id == R.id.notif_new_followers_app) {
notificationSettings.setNewFollow(getNewAppCheckedValue(checked, email));
} else if (id == R.id.notif_video_mention_app) {
notificationSettings.setCommentMention(getNewAppCheckedValue(checked, email));
} else if (id == R.id.notif_abuse_received_app) {
notificationSettings.setAbuseNewMessage(getNewAppCheckedValue(checked, email));
} else if (id == R.id.notif_abuse_accepted_app) {
notificationSettings.setAbuseStateChange(getNewAppCheckedValue(checked, email));
}
});
email.setOnCheckedChangeListener((compoundButtonMail, checkedMail) -> {
int id = email.getId();
if (id == R.id.notif_new_video_mail) {
notificationSettings.setNewVideoFromSubscription(getNewMailCheckedValue(checkedMail, app));
} else if (id == R.id.notif_new_comment_mail) {
notificationSettings.setNewCommentOnMyVideo(getNewMailCheckedValue(checkedMail, app));
} else if (id == R.id.notif_blocked_mail) {
notificationSettings.setBlacklistOnMyVideo(getNewMailCheckedValue(checkedMail, app));
} else if (id == R.id.notif_video_published_mail) {
notificationSettings.setMyVideoPublished(getNewMailCheckedValue(checkedMail, app));
} else if (id == R.id.notif_video_imported_mail) {
notificationSettings.setMyVideoImportFinished(getNewMailCheckedValue(checkedMail, app));
} else if (id == R.id.notif_new_followers_mail) {
notificationSettings.setNewFollow(getNewMailCheckedValue(checkedMail, app));
} else if (id == R.id.notif_video_mention_mail) {
notificationSettings.setCommentMention(getNewMailCheckedValue(checkedMail, app));
} else if (id == R.id.notif_abuse_received_mail) {
notificationSettings.setAbuseNewMessage(getNewMailCheckedValue(checkedMail, app));
} else if (id == R.id.notif_abuse_accepted_mail) {
notificationSettings.setAbuseStateChange(getNewMailCheckedValue(checkedMail, app));
}
});
}
private int getNewAppCheckedValue(boolean checked, SwitchCompat email) {
int newValue;
if (checked && email.isChecked()) {
newValue = 3;
} else if (!checked && email.isChecked()) {
newValue = 2;
} else if (checked && !email.isChecked()) {
newValue = 1;
} else {
newValue = 0;
}
return newValue;
}
private int getNewMailCheckedValue(boolean checked, SwitchCompat app) {
int newValue;
if (checked && app.isChecked()) {
newValue = 3;
} else if (!checked && app.isChecked()) {
newValue = 1;
} else if (checked && !app.isChecked()) {
newValue = 2;
} else {
newValue = 0;
}
return newValue;
}
}

File diff suppressed because it is too large Load Diff

View File

@ -224,7 +224,7 @@ public class PeertubeEditUploadActivity extends AppCompatActivity {
TimelineVM feedsViewModel = new ViewModelProvider(PeertubeEditUploadActivity.this).get(TimelineVM.class); TimelineVM feedsViewModel = new ViewModelProvider(PeertubeEditUploadActivity.this).get(TimelineVM.class);
feedsViewModel.getMyVideo(videoId).observe(PeertubeEditUploadActivity.this, this::manageVIewVideo); feedsViewModel.getMyVideo(null, videoId).observe(PeertubeEditUploadActivity.this, this::manageVIewVideo);
channels = new LinkedHashMap<>(); channels = new LinkedHashMap<>();
setTitle(R.string.edit_video); setTitle(R.string.edit_video);
@ -457,12 +457,12 @@ public class PeertubeEditUploadActivity extends AppCompatActivity {
videoParams.setDescription(description); videoParams.setDescription(description);
videoParams.setNsfw(isNSFW1); videoParams.setNsfw(isNSFW1);
videoParams.setCommentsEnabled(commentEnabled1); videoParams.setCommentsEnabled(commentEnabled1);
videoParams.setCategory((int) finalCategoryToSend.getId()); videoParams.setCategory(finalCategoryToSend.getId());
videoParams.setLicence(String.valueOf(finalLicenseToSend.getId())); videoParams.setLicence(String.valueOf(finalLicenseToSend.getId()));
videoParams.setLanguage(finalLanguageToSend.getId()); videoParams.setLanguage(finalLanguageToSend.getId());
videoParams.setChannelId(channelToSendId); videoParams.setChannelId(channelToSendId);
videoParams.setPrivacy((int) finalPrivacyToSend.getId()); videoParams.setPrivacy(finalPrivacyToSend.getId());
List<String> tags = p_video_tags.getTags(); List<String> tags = p_video_tags.getTags();
videoParams.setTags(tags); videoParams.setTags(tags);
set_upload_submit.setEnabled(false); set_upload_submit.setEnabled(false);
@ -671,7 +671,7 @@ public class PeertubeEditUploadActivity extends AppCompatActivity {
set_upload_submit.setEnabled(true); set_upload_submit.setEnabled(true);
} }
@SuppressWarnings("unused") @SuppressWarnings({"unused", "RedundantSuppression"})
public void manageVIewPostActions(RetrofitPeertubeAPI.ActionType statusAction, APIResponse apiResponse) { public void manageVIewPostActions(RetrofitPeertubeAPI.ActionType statusAction, APIResponse apiResponse) {
Intent intent = new Intent(PeertubeEditUploadActivity.this, MainActivity.class); Intent intent = new Intent(PeertubeEditUploadActivity.this, MainActivity.class);
intent.putExtra(Helper.INTENT_ACTION, Helper.RELOAD_MYVIDEOS); intent.putExtra(Helper.INTENT_ACTION, Helper.RELOAD_MYVIDEOS);

View File

@ -25,17 +25,11 @@ import android.text.method.LinkMovementMethod;
import android.util.Patterns; import android.util.Patterns;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import com.google.android.material.textfield.TextInputEditText;
import com.google.android.material.textfield.TextInputLayout;
import java.util.Arrays; import java.util.Arrays;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@ -43,6 +37,7 @@ import java.util.regex.Pattern;
import app.fedilab.fedilabtube.client.APIResponse; import app.fedilab.fedilabtube.client.APIResponse;
import app.fedilab.fedilabtube.client.RetrofitPeertubeAPI; import app.fedilab.fedilabtube.client.RetrofitPeertubeAPI;
import app.fedilab.fedilabtube.client.entities.AccountCreation; import app.fedilab.fedilabtube.client.entities.AccountCreation;
import app.fedilab.fedilabtube.databinding.ActivityRegisterPeertubeBinding;
import app.fedilab.fedilabtube.helper.Helper; import app.fedilab.fedilabtube.helper.Helper;
import es.dmoral.toasty.Toasty; import es.dmoral.toasty.Toasty;
@ -51,122 +46,112 @@ import static app.fedilab.fedilabtube.MainActivity.PICK_INSTANCE;
public class PeertubeRegisterActivity extends AppCompatActivity { public class PeertubeRegisterActivity extends AppCompatActivity {
private Button signup;
private TextView error_message;
private String instance; private String instance;
private TextInputEditText login_instance; private ActivityRegisterPeertubeBinding binding;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register_peertube); binding = ActivityRegisterPeertubeBinding.inflate(getLayoutInflater());
View mainView = binding.getRoot();
setContentView(mainView);
if (getSupportActionBar() != null) if (getSupportActionBar() != null)
getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true);
signup = findViewById(R.id.signup);
TextInputLayout login_instance_container = findViewById(R.id.login_instance_container);
LinearLayout title_login_instance = findViewById(R.id.title_login_instance);
TextInputEditText username = findViewById(R.id.username);
TextInputEditText email = findViewById(R.id.email);
TextInputEditText password = findViewById(R.id.password);
TextInputEditText password_confirm = findViewById(R.id.password_confirm);
login_instance = findViewById(R.id.login_instance);
CheckBox agreement = findViewById(R.id.agreement);
error_message = findViewById(R.id.error_message);
if (BuildConfig.full_instances) { if (BuildConfig.full_instances) {
login_instance_container.setVisibility(View.VISIBLE); binding.loginInstanceContainer.setVisibility(View.VISIBLE);
title_login_instance.setVisibility(View.VISIBLE); binding.titleLoginInstance.setVisibility(View.VISIBLE);
} else { } else {
login_instance_container.setVisibility(View.GONE); binding.loginInstanceContainer.setVisibility(View.GONE);
title_login_instance.setVisibility(View.GONE); binding.titleLoginInstance.setVisibility(View.GONE);
} }
username.setOnFocusChangeListener((view, focused) -> { binding.username.setOnFocusChangeListener((view, focused) -> {
if (!focused && username.getText() != null) { if (!focused && binding.username.getText() != null) {
Pattern patternUsername = Pattern.compile("^[a-z0-9._]{1,50}$"); Pattern patternUsername = Pattern.compile("^[a-z0-9._]{1,50}$");
Matcher matcherMaxId = patternUsername.matcher(username.getText().toString()); Matcher matcherMaxId = patternUsername.matcher(binding.username.getText().toString());
if (!matcherMaxId.matches()) { if (!matcherMaxId.matches()) {
username.setError(getString(R.string.username_error)); binding.username.setError(getString(R.string.username_error));
} }
} }
}); });
Button instance_help = findViewById(R.id.instance_help);
instance_help.setOnClickListener(v -> { binding.instanceHelp.setOnClickListener(v -> {
Intent intent = new Intent(PeertubeRegisterActivity.this, InstancePickerActivity.class); Intent intent = new Intent(PeertubeRegisterActivity.this, InstancePickerActivity.class);
startActivityForResult(intent, PICK_INSTANCE); startActivityForResult(intent, PICK_INSTANCE);
}); });
email.setOnFocusChangeListener((view, focused) -> { binding.email.setOnFocusChangeListener((view, focused) -> {
if (!focused && email.getText() != null) { if (!focused && binding.email.getText() != null) {
Pattern patternUsername = Patterns.EMAIL_ADDRESS; Pattern patternUsername = Patterns.EMAIL_ADDRESS;
Matcher matcherMaxId = patternUsername.matcher(email.getText().toString()); Matcher matcherMaxId = patternUsername.matcher(binding.email.getText().toString());
if (!matcherMaxId.matches()) { if (!matcherMaxId.matches()) {
email.setError(getString(R.string.email_error)); binding.email.setError(getString(R.string.email_error));
} }
} }
}); });
password.setOnFocusChangeListener((view, focused) -> { binding.password.setOnFocusChangeListener((view, focused) -> {
if (!focused && password.getText() != null) { if (!focused && binding.password.getText() != null) {
if (password.getText().length() < 6) { if (binding.password.getText().length() < 6) {
password.setError(getString(R.string.password_length_error)); binding.password.setError(getString(R.string.password_length_error));
} }
} }
}); });
password_confirm.setOnFocusChangeListener((view, focused) -> { binding.passwordConfirm.setOnFocusChangeListener((view, focused) -> {
if (!focused && password_confirm.getText() != null && password.getText() != null) { if (!focused && binding.passwordConfirm.getText() != null && binding.password.getText() != null) {
if (password_confirm.getText().toString().compareTo(password.getText().toString()) != 0) { if (binding.passwordConfirm.getText().toString().compareTo(binding.password.getText().toString()) != 0) {
password_confirm.setError(getString(R.string.password)); binding.passwordConfirm.setError(getString(R.string.password));
} }
} }
}); });
setTextAgreement(); setTextAgreement();
signup.setOnClickListener(view -> { binding.signup.setOnClickListener(view -> {
error_message.setVisibility(View.GONE); binding.errorMessage.setVisibility(View.GONE);
if (username.getText() == null || email.getText() == null || password.getText() == null || password_confirm.getText() == null || username.getText().toString().trim().length() == 0 || email.getText().toString().trim().length() == 0 || if (binding.username.getText() == null || binding.email.getText() == null || binding.password.getText() == null || binding.passwordConfirm.getText() == null || binding.username.getText().toString().trim().length() == 0 || binding.email.getText().toString().trim().length() == 0 ||
password.getText().toString().trim().length() == 0 || password_confirm.getText().toString().trim().length() == 0 || !agreement.isChecked()) { binding.password.getText().toString().trim().length() == 0 || binding.passwordConfirm.getText().toString().trim().length() == 0 || !binding.agreement.isChecked()) {
Toasty.error(PeertubeRegisterActivity.this, getString(R.string.all_field_filled)).show(); Toasty.error(PeertubeRegisterActivity.this, getString(R.string.all_field_filled)).show();
return; return;
} }
if (!password.getText().toString().trim().equals(password_confirm.getText().toString().trim())) { if (!binding.password.getText().toString().trim().equals(binding.passwordConfirm.getText().toString().trim())) {
Toasty.error(PeertubeRegisterActivity.this, getString(R.string.password_error)).show(); Toasty.error(PeertubeRegisterActivity.this, getString(R.string.password_error)).show();
return; return;
} }
if (!android.util.Patterns.EMAIL_ADDRESS.matcher(email.getText().toString().trim()).matches()) { if (!android.util.Patterns.EMAIL_ADDRESS.matcher(binding.email.getText().toString().trim()).matches()) {
Toasty.error(PeertubeRegisterActivity.this, getString(R.string.email_error)).show(); Toasty.error(PeertubeRegisterActivity.this, getString(R.string.email_error)).show();
return; return;
} }
String[] emailArray = email.getText().toString().split("@"); String[] emailArray = binding.email.getText().toString().split("@");
if (!BuildConfig.full_instances) {
if (emailArray.length > 1 && !Arrays.asList(Helper.valideEmails).contains(emailArray[1])) { if (emailArray.length > 1 && !Arrays.asList(Helper.valideEmails).contains(emailArray[1])) {
Toasty.error(PeertubeRegisterActivity.this, getString(R.string.email_error_domain, emailArray[1])).show(); Toasty.error(PeertubeRegisterActivity.this, getString(R.string.email_error_domain, emailArray[1])).show();
return; return;
} }
}
if (password.getText().toString().trim().length() < 8) { if (binding.password.getText().toString().trim().length() < 8) {
Toasty.error(PeertubeRegisterActivity.this, getString(R.string.password_too_short)).show(); Toasty.error(PeertubeRegisterActivity.this, getString(R.string.password_too_short)).show();
return; return;
} }
if (username.getText().toString().matches("[a-z0-9_]")) { if (binding.username.getText().toString().matches("[a-z0-9_]")) {
Toasty.error(PeertubeRegisterActivity.this, getString(R.string.username_error)).show(); Toasty.error(PeertubeRegisterActivity.this, getString(R.string.username_error)).show();
return; return;
} }
signup.setEnabled(false); binding.signup.setEnabled(false);
if (BuildConfig.full_instances) { if (BuildConfig.full_instances) {
if (login_instance.getText() != null) { if (binding.loginInstance.getText() != null) {
instance = login_instance.getText().toString(); instance = binding.loginInstance.getText().toString();
} else { } else {
instance = ""; instance = "";
} }
login_instance.setOnFocusChangeListener((view1, focus) -> { binding.loginInstance.setOnFocusChangeListener((view1, focus) -> {
if (!focus) { if (!focus) {
setTextAgreement(); setTextAgreement();
} }
@ -175,12 +160,15 @@ public class PeertubeRegisterActivity extends AppCompatActivity {
String host = emailArray[1]; String host = emailArray[1];
instance = Helper.getPeertubeUrl(host); instance = Helper.getPeertubeUrl(host);
} }
if (instance != null) {
instance = instance.toLowerCase().trim();
}
AccountCreation accountCreation = new AccountCreation(); AccountCreation accountCreation = new AccountCreation();
accountCreation.setEmail(email.getText().toString().trim()); accountCreation.setEmail(binding.email.getText().toString().trim());
accountCreation.setPassword(password.getText().toString().trim()); accountCreation.setPassword(binding.password.getText().toString().trim());
accountCreation.setPasswordConfirm(password_confirm.getText().toString().trim()); accountCreation.setPasswordConfirm(binding.passwordConfirm.getText().toString().trim());
accountCreation.setUsername(username.getText().toString().trim()); accountCreation.setUsername(binding.username.getText().toString().trim());
accountCreation.setInstance(instance); accountCreation.setInstance(instance);
new Thread(() -> { new Thread(() -> {
@ -205,9 +193,9 @@ public class PeertubeRegisterActivity extends AppCompatActivity {
} else { } else {
errorMessage = getString(R.string.toast_error); errorMessage = getString(R.string.toast_error);
} }
error_message.setText(errorMessage); binding.errorMessage.setText(errorMessage);
error_message.setVisibility(View.VISIBLE); binding.errorMessage.setVisibility(View.VISIBLE);
signup.setEnabled(true); binding.signup.setEnabled(true);
return; return;
} }
@ -255,8 +243,8 @@ public class PeertubeRegisterActivity extends AppCompatActivity {
if (requestCode == PICK_INSTANCE && resultCode == Activity.RESULT_OK) { if (requestCode == PICK_INSTANCE && resultCode == Activity.RESULT_OK) {
if (data != null && data.getData() != null) { if (data != null && data.getData() != null) {
String instance = String.valueOf(data.getData()); String instance = String.valueOf(data.getData());
login_instance.setText(instance); binding.loginInstance.setText(instance);
login_instance.setSelection(instance.length()); binding.loginInstance.setSelection(instance.length());
setTextAgreement(); setTextAgreement();
} }
} }
@ -270,9 +258,9 @@ public class PeertubeRegisterActivity extends AppCompatActivity {
agreement_text.setMovementMethod(null); agreement_text.setMovementMethod(null);
agreement_text.setText(null); agreement_text.setText(null);
if (BuildConfig.full_instances) { if (BuildConfig.full_instances) {
if (login_instance.getText() != null) { if (binding.loginInstance.getText() != null) {
content_agreement = getString(R.string.agreement_check_peertube, content_agreement = getString(R.string.agreement_check_peertube,
"<a href='https://" + login_instance.getText().toString() + "/about/instance#terms-section' >" + tos + "</a>" "<a href='https://" + binding.loginInstance.getText().toString() + "/about/instance#terms-section' >" + tos + "</a>"
); );
} }
} else { } else {

View File

@ -66,8 +66,8 @@ import static app.fedilab.fedilabtube.client.RetrofitPeertubeAPI.DataType.MY_CHA
public class PeertubeUploadActivity extends AppCompatActivity { public class PeertubeUploadActivity extends AppCompatActivity {
public static final int MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE = 724;
private final int PICK_IVDEO = 52378; private final int PICK_IVDEO = 52378;
private final int MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE = 724;
private Button set_upload_file, set_upload_submit; private Button set_upload_file, set_upload_submit;
private Spinner set_upload_privacy, set_upload_channel; private Spinner set_upload_privacy, set_upload_channel;
private TextView set_upload_file_name; private TextView set_upload_file_name;

View File

@ -14,47 +14,25 @@ package app.fedilab.fedilabtube;
* You should have received a copy of the GNU General Public License along with TubeLab; if not, * You should have received a copy of the GNU General Public License along with TubeLab; if not,
* see <http://www.gnu.org/licenses>. */ * see <http://www.gnu.org/licenses>. */
import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View;
import android.widget.RelativeLayout;
import android.widget.Toast; import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.ViewModelProvider; import androidx.fragment.app.FragmentTransaction;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import java.util.ArrayList; import app.fedilab.fedilabtube.client.data.PlaylistData;
import java.util.List; import app.fedilab.fedilabtube.fragment.DisplayVideosFragment;
import app.fedilab.fedilabtube.helper.Helper;
import app.fedilab.fedilabtube.client.APIResponse; import app.fedilab.fedilabtube.helper.PlaylistExportHelper;
import app.fedilab.fedilabtube.client.data.PlaylistData.Playlist; import app.fedilab.fedilabtube.viewmodel.TimelineVM;
import app.fedilab.fedilabtube.client.data.VideoData.Video;
import app.fedilab.fedilabtube.client.data.VideoPlaylistData;
import app.fedilab.fedilabtube.drawer.PeertubeAdapter;
import app.fedilab.fedilabtube.viewmodel.PlaylistsVM;
import es.dmoral.toasty.Toasty; import es.dmoral.toasty.Toasty;
import static app.fedilab.fedilabtube.viewmodel.PlaylistsVM.action.GET_LIST_VIDEOS;
public class PlaylistsActivity extends AppCompatActivity { public class PlaylistsActivity extends AppCompatActivity {
private final int PICK_IMPORT = 5556;
LinearLayoutManager mLayoutManager;
private RelativeLayout mainLoader, nextElementLoader, textviewNoAction;
private SwipeRefreshLayout swipeRefreshLayout;
private boolean swiped;
private List<Video> peertubes;
private String max_id;
private Playlist playlist;
private boolean firstLoad;
private boolean flag_loading;
private PeertubeAdapter peertubeAdapter;
private PlaylistsVM viewModel;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
@ -65,72 +43,46 @@ public class PlaylistsActivity extends AppCompatActivity {
setContentView(R.layout.activity_playlists); setContentView(R.layout.activity_playlists);
peertubes = new ArrayList<>();
RecyclerView lv_playlist = findViewById(R.id.lv_playlist);
mainLoader = findViewById(R.id.loader);
nextElementLoader = findViewById(R.id.loading_next_status);
textviewNoAction = findViewById(R.id.no_action);
mainLoader.setVisibility(View.VISIBLE);
swipeRefreshLayout = findViewById(R.id.swipeContainer);
max_id = null; PlaylistData.Playlist playlist;
flag_loading = true;
firstLoad = true;
swiped = false;
mainLoader.setVisibility(View.VISIBLE);
nextElementLoader.setVisibility(View.GONE);
peertubeAdapter = new PeertubeAdapter(this.peertubes);
lv_playlist.setAdapter(peertubeAdapter);
mLayoutManager = new LinearLayoutManager(PlaylistsActivity.this);
lv_playlist.setLayoutManager(mLayoutManager);
Bundle b = getIntent().getExtras(); Bundle b = getIntent().getExtras();
if (b != null) { if (b != null) {
playlist = b.getParcelable("playlist"); playlist = b.getParcelable("playlist");
if (playlist == null) {
return;
}
} else { } else {
Toasty.error(PlaylistsActivity.this, getString(R.string.toast_error), Toast.LENGTH_LONG).show(); Toasty.error(PlaylistsActivity.this, getString(R.string.toast_error), Toast.LENGTH_LONG).show();
return; return;
} }
if (getSupportActionBar() != null)
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
setTitle(playlist.getDisplayName()); setTitle(playlist.getDisplayName());
if (savedInstanceState == null) {
DisplayVideosFragment displayVideosFragment = new DisplayVideosFragment();
Bundle bundle = new Bundle();
bundle.putSerializable(Helper.TIMELINE_TYPE, TimelineVM.TimelineType.VIDEOS_IN_PLAYLIST);
bundle.putSerializable("playlistId", playlist.getUuid());
displayVideosFragment.setArguments(bundle);
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.nav_host_fragment, displayVideosFragment).commit();
}
viewModel = new ViewModelProvider(PlaylistsActivity.this).get(PlaylistsVM.class);
lv_playlist.addOnScrollListener(new RecyclerView.OnScrollListener() {
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
int firstVisibleItem = mLayoutManager.findFirstVisibleItemPosition();
if (dy > 0) {
int visibleItemCount = mLayoutManager.getChildCount();
int totalItemCount = mLayoutManager.getItemCount();
if (firstVisibleItem + visibleItemCount == totalItemCount) {
if (!flag_loading) {
flag_loading = true;
viewModel.manage(GET_LIST_VIDEOS, playlist, null).observe(PlaylistsActivity.this, apiResponse -> manageVIewPlaylists(PlaylistsVM.action.GET_LIST_VIDEOS, apiResponse));
nextElementLoader.setVisibility(View.VISIBLE);
} }
} else {
nextElementLoader.setVisibility(View.GONE);
}
}
}
});
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PICK_IMPORT && resultCode == RESULT_OK) {
if (data == null || data.getData() == null) {
Toasty.error(PlaylistsActivity.this, getString(R.string.toast_error), Toast.LENGTH_LONG).show();
return;
}
PlaylistExportHelper.manageIntentUrl(PlaylistsActivity.this, data);
swipeRefreshLayout.setOnRefreshListener(() -> { } else if (requestCode == PICK_IMPORT) {
max_id = null; Toasty.error(PlaylistsActivity.this, getString(R.string.toast_error), Toast.LENGTH_LONG).show();
firstLoad = true; }
flag_loading = true;
swiped = true;
viewModel.manage(GET_LIST_VIDEOS, playlist, null).observe(PlaylistsActivity.this, apiResponse -> manageVIewPlaylists(PlaylistsVM.action.GET_LIST_VIDEOS, apiResponse));
});
viewModel.manage(GET_LIST_VIDEOS, playlist, null).observe(PlaylistsActivity.this, apiResponse -> manageVIewPlaylists(PlaylistsVM.action.GET_LIST_VIDEOS, apiResponse));
} }
@ -143,45 +95,4 @@ public class PlaylistsActivity extends AppCompatActivity {
return super.onOptionsItemSelected(item); return super.onOptionsItemSelected(item);
} }
public void manageVIewPlaylists(PlaylistsVM.action actionType, APIResponse apiResponse) {
mainLoader.setVisibility(View.GONE);
nextElementLoader.setVisibility(View.GONE);
if (apiResponse.getError() != null) {
Toasty.error(PlaylistsActivity.this, apiResponse.getError().getError(), Toast.LENGTH_LONG).show();
swipeRefreshLayout.setRefreshing(false);
swiped = false;
flag_loading = false;
return;
}
if (actionType == GET_LIST_VIDEOS) {
int previousPosition = this.peertubes.size();
List<VideoPlaylistData.VideoPlaylist> videoPlaylists = apiResponse.getVideoPlaylist();
List<Video> videos = new ArrayList<>();
for (VideoPlaylistData.VideoPlaylist v : videoPlaylists) {
videos.add(v.getVideo());
}
max_id = apiResponse.getMax_id();
flag_loading = (max_id == null);
if (!swiped && firstLoad && videos.size() == 0)
textviewNoAction.setVisibility(View.VISIBLE);
else
textviewNoAction.setVisibility(View.GONE);
if (swiped) {
if (previousPosition > 0) {
this.peertubes.subList(0, previousPosition).clear();
peertubeAdapter.notifyItemRangeRemoved(0, previousPosition);
}
swiped = false;
}
if (videos.size() > 0) {
this.peertubes.addAll(videos);
peertubeAdapter.notifyItemRangeInserted(previousPosition, videos.size());
}
swipeRefreshLayout.setRefreshing(false);
firstLoad = false;
}
}
} }

View File

@ -0,0 +1,401 @@
package app.fedilab.fedilabtube;
/* Copyright 2020 Thomas Schneider
*
* This file is a part of TubeLab
*
* This program is free software; you can redistribute it and/or modify it under the terms of the
* GNU General Public License as published by the Free Software Foundation; either version 3 of the
* License, or (at your option) any later version.
*
* TubeLab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
* Public License for more details.
*
* You should have received a copy of the GNU General Public License along with TubeLab; if not,
* see <http://www.gnu.org/licenses>. */
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.RadioGroup;
import android.widget.Spinner;
import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;
import com.mancj.materialsearchbar.MaterialSearchBar;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import app.fedilab.fedilabtube.client.entities.SepiaSearch;
import app.fedilab.fedilabtube.fragment.DisplaySepiaSearchFragment;
import app.fedilab.fedilabtube.helper.Helper;
import mabbas007.tagsedittext.TagsEditText;
import static app.fedilab.fedilabtube.MainActivity.peertubeInformation;
import static app.fedilab.fedilabtube.PeertubeActivity.hideKeyboard;
public class SepiaSearchActivity extends AppCompatActivity {
private SepiaSearch sepiaSearchVideo, sepiaSearchChannel;
private TagsEditText sepia_element_all_of_tags, sepia_element_one_of_tags;
private MaterialSearchBar searchBar;
private ConstraintLayout filter_elements;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sepia_search);
sepiaSearchVideo = new SepiaSearch();
sepiaSearchChannel = new SepiaSearch();
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
sepiaSearchVideo.setCount(String.valueOf(sharedpreferences.getInt(Helper.SET_VIDEOS_PER_PAGE, Helper.VIDEOS_PER_PAGE)));
sepiaSearchVideo.setDurationMin(0);
sepiaSearchVideo.setDurationMax(9999999);
sepiaSearchVideo.setStart("0");
sepiaSearchVideo.setSort("-match");
if (getSupportActionBar() != null)
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Button filter = findViewById(R.id.filter);
filter_elements = findViewById(R.id.filter_elements);
filter.setOnClickListener(view -> {
if (filter_elements.getVisibility() == View.VISIBLE) {
filter_elements.setVisibility(View.GONE);
} else {
filter_elements.setVisibility(View.VISIBLE);
}
});
RadioGroup sepia_element_nsfw = findViewById(R.id.sepia_element_nsfw);
sepia_element_nsfw.setOnCheckedChangeListener((group, checkedId) -> sepiaSearchVideo.setNsfw(checkedId != R.id.sepia_element_nsfw_no));
RadioGroup radio_date = findViewById(R.id.radio_date);
radio_date.setOnCheckedChangeListener((group, checkedId) -> {
if (checkedId == R.id.sepia_element_published_date_today) {
Calendar cal = GregorianCalendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
sepiaSearchVideo.setStartDate(cal.getTime());
} else if (checkedId == R.id.sepia_element_published_date_last_7_days) {
Calendar cal;
cal = GregorianCalendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.DAY_OF_YEAR, -7);
sepiaSearchVideo.setStartDate(cal.getTime());
} else if (checkedId == R.id.sepia_element_published_date_last_30_days) {
Calendar cal;
cal = GregorianCalendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.DAY_OF_YEAR, -30);
sepiaSearchVideo.setStartDate(cal.getTime());
} else if (checkedId == R.id.sepia_element_published_date_last_365_days) {
Calendar cal;
cal = GregorianCalendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.DAY_OF_YEAR, -365);
sepiaSearchVideo.setStartDate(cal.getTime());
} else {
sepiaSearchVideo.setStartDate(null);
}
});
RadioGroup duration = findViewById(R.id.duration);
duration.setOnCheckedChangeListener((group, checkedId) -> {
if (checkedId == R.id.sepia_element_duration_short) {
sepiaSearchVideo.setDurationMin(0);
sepiaSearchVideo.setDurationMax(240);
} else if (checkedId == R.id.sepia_element_duration_medium) {
sepiaSearchVideo.setDurationMin(240);
sepiaSearchVideo.setDurationMax(600);
} else if (checkedId == R.id.sepia_element_duration_long) {
sepiaSearchVideo.setDurationMin(600);
sepiaSearchVideo.setDurationMax(999999999);
} else {
sepiaSearchVideo.setDurationMin(0);
sepiaSearchVideo.setDurationMax(999999999);
}
});
Spinner sort_by = findViewById(R.id.sort_by);
ArrayAdapter<String> adapterSortBy = new ArrayAdapter<>(SepiaSearchActivity.this,
android.R.layout.simple_spinner_dropdown_item, getResources().getStringArray(R.array.sort_by_array));
sort_by.setAdapter(adapterSortBy);
sort_by.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
String orderby, channelOrderBy;
switch (position) {
case 1:
orderby = "-publishedAt";
channelOrderBy = "-createdAt";
break;
case 2:
orderby = "publishedAt";
channelOrderBy = "createdAt";
break;
default:
orderby = "-match";
channelOrderBy = null;
}
sepiaSearchVideo.setSort(orderby);
sepiaSearchChannel.setSort(channelOrderBy);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
Spinner sepia_element_category = findViewById(R.id.sepia_element_category);
Spinner sepia_element_license = findViewById(R.id.sepia_element_license);
Spinner sepia_element_language = findViewById(R.id.sepia_element_language);
sepia_element_all_of_tags = findViewById(R.id.sepia_element_all_of_tags);
sepia_element_one_of_tags = findViewById(R.id.sepia_element_one_of_tags);
LinkedHashMap<Integer, String> categories = new LinkedHashMap<>(peertubeInformation.getCategories());
LinkedHashMap<Integer, String> licences = new LinkedHashMap<>(peertubeInformation.getLicences());
LinkedHashMap<String, String> languages = new LinkedHashMap<>(peertubeInformation.getLanguages());
LinkedHashMap<String, String> translations = null;
if (peertubeInformation.getTranslations() != null) {
translations = new LinkedHashMap<>(peertubeInformation.getTranslations());
}
//Populate catgories
String[] categoriesA = new String[categories.size() + 1];
categoriesA[0] = getString(R.string.display_all_categories);
Iterator<Map.Entry<Integer, String>> it = categories.entrySet().iterator();
int i = 1;
while (it.hasNext()) {
Map.Entry<Integer, String> pair = it.next();
if (translations == null || translations.size() == 0 || !translations.containsKey(pair.getValue()))
categoriesA[i] = pair.getValue();
else
categoriesA[i] = translations.get(pair.getValue());
it.remove();
i++;
}
ArrayAdapter<String> adapterCatgories = new ArrayAdapter<>(SepiaSearchActivity.this,
android.R.layout.simple_spinner_dropdown_item, categoriesA);
sepia_element_category.setAdapter(adapterCatgories);
//Populate licenses
String[] licensesA = new String[licences.size() + 1];
licensesA[0] = getString(R.string.display_all_licenses);
it = licences.entrySet().iterator();
i = 1;
while (it.hasNext()) {
Map.Entry<Integer, String> pair = it.next();
if (translations == null || translations.size() == 0 || !translations.containsKey(pair.getValue()))
licensesA[i] = pair.getValue();
else
licensesA[i] = translations.get(pair.getValue());
it.remove();
i++;
}
ArrayAdapter<String> adapterLicenses = new ArrayAdapter<>(SepiaSearchActivity.this,
android.R.layout.simple_spinner_dropdown_item, licensesA);
sepia_element_license.setAdapter(adapterLicenses);
//Populate languages
String[] languagesA = new String[languages.size() + 1];
languagesA[0] = getString(R.string.display_all_languages);
Iterator<Map.Entry<String, String>> itl = languages.entrySet().iterator();
i = 1;
while (itl.hasNext()) {
Map.Entry<String, String> pair = itl.next();
if (translations == null || translations.size() == 0 || !translations.containsKey(pair.getValue()))
languagesA[i] = pair.getValue();
else
languagesA[i] = translations.get(pair.getValue());
itl.remove();
i++;
}
ArrayAdapter<String> adapterLanguages = new ArrayAdapter<>(SepiaSearchActivity.this,
android.R.layout.simple_spinner_dropdown_item, languagesA);
sepia_element_language.setAdapter(adapterLanguages);
sepia_element_license.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
updateLicensePosition(position);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
//Manage categories
sepia_element_category.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
updateCategoryPosition(position);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
//Manage languages
sepia_element_language.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
updateLanguagesPosition(position);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
searchBar = findViewById(R.id.searchBar);
searchBar.setOnSearchActionListener(new MaterialSearchBar.OnSearchActionListener() {
@Override
public void onSearchStateChanged(boolean enabled) {
}
@Override
public void onSearchConfirmed(CharSequence text) {
makeSearch();
}
@Override
public void onButtonClicked(int buttonCode) {
makeSearch();
}
});
Button apply_filter = findViewById(R.id.apply_filter);
apply_filter.setOnClickListener(v -> makeSearch());
searchBar.openSearch();
}
private void makeSearch() {
hideKeyboard(SepiaSearchActivity.this);
sepiaSearchVideo.setStart("0");
if (sepia_element_one_of_tags.getTags().size() > 0) {
sepiaSearchVideo.setTagsOneOf(sepia_element_one_of_tags.getTags());
} else {
sepiaSearchVideo.setTagsOneOf(null);
}
if (sepia_element_all_of_tags.getTags().size() > 0) {
sepiaSearchVideo.setTagsAllOf(sepia_element_all_of_tags.getTags());
} else {
sepiaSearchVideo.setTagsAllOf(null);
}
Fragment fragment = getSupportFragmentManager().findFragmentByTag("SEPIA_SEARCH");
if (fragment != null)
getSupportFragmentManager().beginTransaction().remove(fragment).commit();
filter_elements.setVisibility(View.GONE);
sepiaSearchVideo.setSearch(searchBar.getText());
DisplaySepiaSearchFragment displaySepiaSearchFragment = new DisplaySepiaSearchFragment();
Bundle bundle = new Bundle();
bundle.putParcelable("sepiaSearchVideo", sepiaSearchVideo);
displaySepiaSearchFragment.setArguments(bundle);
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.container, displaySepiaSearchFragment, "SEPIA_SEARCH").commit();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
private void updateLanguagesPosition(int position) {
LinkedHashMap<String, String> languagesCheck = new LinkedHashMap<>(peertubeInformation.getLanguages());
Iterator<Map.Entry<String, String>> it = languagesCheck.entrySet().iterator();
int i = 0;
while (it.hasNext()) {
Map.Entry<String, String> pair = it.next();
if (i == position && position > 0) {
List<String> languages = new ArrayList<>();
languages.add(pair.getKey());
sepiaSearchVideo.setBoostLanguages(languages);
break;
} else {
sepiaSearchVideo.setBoostLanguages(null);
}
it.remove();
i++;
}
}
private void updateCategoryPosition(int position) {
LinkedHashMap<Integer, String> categoriesCheck = new LinkedHashMap<>(peertubeInformation.getCategories());
Iterator<Map.Entry<Integer, String>> it = categoriesCheck.entrySet().iterator();
int i = 0;
while (it.hasNext()) {
Map.Entry<Integer, String> pair = it.next();
if (i == position && position > 0) {
List<Integer> categories = new ArrayList<>();
categories.add(pair.getKey());
sepiaSearchVideo.setCategoryOneOf(categories);
break;
} else {
sepiaSearchVideo.setCategoryOneOf(null);
}
it.remove();
i++;
}
}
private void updateLicensePosition(int position) {
LinkedHashMap<Integer, String> licensesCheck = new LinkedHashMap<>(peertubeInformation.getLicences());
Iterator<Map.Entry<Integer, String>> it = licensesCheck.entrySet().iterator();
int i = 0;
while (it.hasNext()) {
Map.Entry<Integer, String> pair = it.next();
if (i == position && position > 0) {
List<Integer> licenses = new ArrayList<>();
licenses.add(pair.getKey());
sepiaSearchVideo.setLicenceOneOf(licenses);
break;
} else {
sepiaSearchVideo.setLicenceOneOf(null);
}
it.remove();
i++;
}
}
}

View File

@ -15,8 +15,6 @@ package app.fedilab.fedilabtube;
* see <http://www.gnu.org/licenses>. */ * see <http://www.gnu.org/licenses>. */
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.ColorStateList;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.text.Html; import android.text.Html;
@ -26,8 +24,6 @@ import android.view.LayoutInflater;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText; import android.widget.EditText;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.LinearLayout; import android.widget.LinearLayout;
@ -36,7 +32,6 @@ import android.widget.Toast;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter; import androidx.fragment.app.FragmentStatePagerAdapter;
@ -48,45 +43,32 @@ import com.google.android.material.tabs.TabLayout;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import app.fedilab.fedilabtube.client.APIResponse; import app.fedilab.fedilabtube.client.APIResponse;
import app.fedilab.fedilabtube.client.RetrofitPeertubeAPI; import app.fedilab.fedilabtube.client.RetrofitPeertubeAPI;
import app.fedilab.fedilabtube.client.data.ChannelData.Channel; import app.fedilab.fedilabtube.client.data.AccountData;
import app.fedilab.fedilabtube.fragment.DisplayAccountsFragment; import app.fedilab.fedilabtube.fragment.DisplayChannelsFragment;
import app.fedilab.fedilabtube.fragment.DisplayVideosFragment; import app.fedilab.fedilabtube.fragment.DisplayVideosFragment;
import app.fedilab.fedilabtube.helper.Helper; import app.fedilab.fedilabtube.helper.Helper;
import app.fedilab.fedilabtube.viewmodel.ChannelsVM; import app.fedilab.fedilabtube.viewmodel.AccountsVM;
import app.fedilab.fedilabtube.viewmodel.PostActionsVM; import app.fedilab.fedilabtube.viewmodel.PostActionsVM;
import app.fedilab.fedilabtube.viewmodel.RelationshipVM;
import app.fedilab.fedilabtube.viewmodel.TimelineVM; import app.fedilab.fedilabtube.viewmodel.TimelineVM;
import es.dmoral.toasty.Toasty; import es.dmoral.toasty.Toasty;
import static androidx.core.text.HtmlCompat.FROM_HTML_MODE_LEGACY; import static androidx.core.text.HtmlCompat.FROM_HTML_MODE_LEGACY;
import static app.fedilab.fedilabtube.client.RetrofitPeertubeAPI.ActionType.FOLLOW;
import static app.fedilab.fedilabtube.client.RetrofitPeertubeAPI.ActionType.MUTE; import static app.fedilab.fedilabtube.client.RetrofitPeertubeAPI.ActionType.MUTE;
import static app.fedilab.fedilabtube.client.RetrofitPeertubeAPI.ActionType.REPORT_ACCOUNT; import static app.fedilab.fedilabtube.client.RetrofitPeertubeAPI.ActionType.REPORT_ACCOUNT;
import static app.fedilab.fedilabtube.client.RetrofitPeertubeAPI.ActionType.UNFOLLOW;
import static app.fedilab.fedilabtube.client.RetrofitPeertubeAPI.DataType.CHANNEL;
import static app.fedilab.fedilabtube.helper.Helper.getLiveInstance;
import static app.fedilab.fedilabtube.helper.Helper.isLoggedIn;
public class ShowAccountActivity extends AppCompatActivity { public class ShowAccountActivity extends AppCompatActivity {
private Button account_follow;
private ViewPager mPager; private ViewPager mPager;
private TabLayout tabLayout; private TabLayout tabLayout;
private TextView account_note, subscriber_count; private TextView account_note, subscriber_count;
private List<Map<String, Boolean>> relationship;
private ImageView account_pp; private ImageView account_pp;
private TextView account_dn; private TextView account_dn;
private Channel channel; private AccountData.Account account;
private action doAction; private String accountAcct;
private String channelAcct;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
@ -94,15 +76,13 @@ public class ShowAccountActivity extends AppCompatActivity {
setContentView(R.layout.activity_show_account); setContentView(R.layout.activity_show_account);
setTitle(""); setTitle("");
Bundle b = getIntent().getExtras(); Bundle b = getIntent().getExtras();
account_follow = findViewById(R.id.account_follow);
subscriber_count = findViewById(R.id.subscriber_count); subscriber_count = findViewById(R.id.subscriber_count);
account_follow.setEnabled(false);
account_pp = findViewById(R.id.account_pp); account_pp = findViewById(R.id.account_pp);
account_dn = findViewById(R.id.account_dn); account_dn = findViewById(R.id.account_dn);
account_pp.setBackgroundResource(R.drawable.account_pp_border); account_pp.setBackgroundResource(R.drawable.account_pp_border);
if (b != null) { if (b != null) {
channel = b.getParcelable("channel"); account = b.getParcelable("account");
channelAcct = b.getString("channelId"); accountAcct = b.getString("accountAcct");
} else { } else {
Toasty.error(ShowAccountActivity.this, getString(R.string.toast_error_loading_account), Toast.LENGTH_LONG).show(); Toasty.error(ShowAccountActivity.this, getString(R.string.toast_error_loading_account), Toast.LENGTH_LONG).show();
} }
@ -114,11 +94,9 @@ public class ShowAccountActivity extends AppCompatActivity {
tabLayout = findViewById(R.id.account_tabLayout); tabLayout = findViewById(R.id.account_tabLayout);
account_note = findViewById(R.id.account_note); account_note = findViewById(R.id.account_note);
manageAccount();
ChannelsVM viewModel = new ViewModelProvider(ShowAccountActivity.this).get(ChannelsVM.class); AccountsVM viewModel = new ViewModelProvider(ShowAccountActivity.this).get(AccountsVM.class);
viewModel.getAccount(accountAcct == null ? account.getUsername() + "@" + account.getHost() : accountAcct).observe(ShowAccountActivity.this, this::manageViewAccounts);
manageChannel();
viewModel.get(CHANNEL, channelAcct == null ? channel.getName() + "@" + channel.getHost() : channelAcct).observe(ShowAccountActivity.this, this::manageViewAccounts);
} }
@Override @Override
@ -127,6 +105,7 @@ public class ShowAccountActivity extends AppCompatActivity {
if (!Helper.isLoggedIn(ShowAccountActivity.this)) { if (!Helper.isLoggedIn(ShowAccountActivity.this)) {
menu.findItem(R.id.action_mute).setVisible(false); menu.findItem(R.id.action_mute).setVisible(false);
} }
menu.findItem(R.id.action_display_account).setVisible(false);
return true; return true;
} }
@ -137,7 +116,7 @@ public class ShowAccountActivity extends AppCompatActivity {
return true; return true;
} else if (item.getItemId() == R.id.action_mute) { } else if (item.getItemId() == R.id.action_mute) {
PostActionsVM viewModel = new ViewModelProvider(ShowAccountActivity.this).get(PostActionsVM.class); PostActionsVM viewModel = new ViewModelProvider(ShowAccountActivity.this).get(PostActionsVM.class);
viewModel.post(MUTE, channel.getOwnerAccount() != null ? channel.getOwnerAccount().getAcct() : channel.getAcct(), null).observe(ShowAccountActivity.this, apiResponse -> manageVIewPostActions(MUTE, apiResponse)); viewModel.post(MUTE, accountAcct == null ? account.getUsername() + "@" + account.getHost() : accountAcct, null).observe(ShowAccountActivity.this, apiResponse -> manageVIewPostActions(MUTE, apiResponse));
} else if (item.getItemId() == R.id.action_report) { } else if (item.getItemId() == R.id.action_report) {
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(ShowAccountActivity.this); AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(ShowAccountActivity.this);
LayoutInflater inflater1 = getLayoutInflater(); LayoutInflater inflater1 = getLayoutInflater();
@ -150,40 +129,39 @@ public class ShowAccountActivity extends AppCompatActivity {
Toasty.info(ShowAccountActivity.this, getString(R.string.report_comment_size), Toasty.LENGTH_LONG).show(); Toasty.info(ShowAccountActivity.this, getString(R.string.report_comment_size), Toasty.LENGTH_LONG).show();
} else { } else {
PostActionsVM viewModel = new ViewModelProvider(ShowAccountActivity.this).get(PostActionsVM.class); PostActionsVM viewModel = new ViewModelProvider(ShowAccountActivity.this).get(PostActionsVM.class);
viewModel.post(REPORT_ACCOUNT, channel.getId(), report_content.getText().toString()).observe(ShowAccountActivity.this, apiResponse -> manageVIewPostActions(REPORT_ACCOUNT, apiResponse)); viewModel.post(REPORT_ACCOUNT, account.getId(), report_content.getText().toString()).observe(ShowAccountActivity.this, apiResponse -> manageVIewPostActions(REPORT_ACCOUNT, apiResponse));
dialog.dismiss(); dialog.dismiss();
} }
}); });
AlertDialog alertDialog = dialogBuilder.create(); AlertDialog alertDialog = dialogBuilder.create();
alertDialog.show(); alertDialog.show();
} else if (item.getItemId() == R.id.action_share && account != null) {
Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.shared_via));
String extra_text = account.getUrl();
sendIntent.putExtra(Intent.EXTRA_TEXT, extra_text);
sendIntent.setType("text/plain");
try {
startActivity(Intent.createChooser(sendIntent, getString(R.string.share_with)));
} catch (Exception e) {
Toasty.error(ShowAccountActivity.this, getString(R.string.toast_error), Toasty.LENGTH_LONG).show();
}
} }
return super.onOptionsItemSelected(item); return super.onOptionsItemSelected(item);
} }
private void manageChannel() { private void manageAccount() {
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE);
String accountIdRelation = channel.getAcct();
if (isLoggedIn(ShowAccountActivity.this)) {
RelationshipVM viewModel = new ViewModelProvider(ShowAccountActivity.this).get(RelationshipVM.class);
List<String> uids = new ArrayList<>();
uids.add(accountIdRelation);
viewModel.get(uids).observe(ShowAccountActivity.this, this::manageVIewRelationship);
}
setTitle(channel.getAcct());
setTitle(account.getAcct());
mPager = findViewById(R.id.account_viewpager); mPager = findViewById(R.id.account_viewpager);
tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.channels)));
tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.videos))); tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.videos)));
mPager.setOffscreenPageLimit(1); mPager.setOffscreenPageLimit(2);
PagerAdapter mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager()); PagerAdapter mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
mPager.setAdapter(mPagerAdapter); mPager.setAdapter(mPagerAdapter);
ViewGroup.LayoutParams params = tabLayout.getLayoutParams();
params.height = 0;
tabLayout.setLayoutParams(params);
mPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { mPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override @Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
@ -222,112 +200,26 @@ public class ShowAccountActivity extends AppCompatActivity {
switch (tab.getPosition()) { switch (tab.getPosition()) {
case 0: case 0:
if (fragment != null) { if (fragment != null) {
DisplayVideosFragment displayVideosFragment = ((DisplayVideosFragment) fragment); DisplayChannelsFragment displayChannelsFragment = ((DisplayChannelsFragment) fragment);
displayVideosFragment.scrollToTop(); displayChannelsFragment.scrollToTop();
} }
break; break;
case 1: case 1:
if (fragment != null) { if (fragment != null) {
DisplayAccountsFragment displayAccountsFragment = ((DisplayAccountsFragment) fragment); DisplayVideosFragment displayVideosFragment = ((DisplayVideosFragment) fragment);
displayAccountsFragment.scrollToTop(); displayVideosFragment.scrollToTop();
} }
break; break;
} }
} }
}); });
account_dn.setText(channel.getDisplayName()); account_dn.setText(account.getDisplayName());
manageNotes(account);
manageNotes(channel); Helper.loadGiF(ShowAccountActivity.this, account.getAvatar() != null ? account.getAvatar().getPath() : null, account_pp);
Helper.loadGiF(ShowAccountActivity.this, channel.getAvatar() != null ? channel.getAvatar().getPath() : null, account_pp);
//Follow button
String target = channel.getAcct();
account_follow.setOnClickListener(v -> {
if (doAction == action.NOTHING) {
Toasty.info(ShowAccountActivity.this, getString(R.string.nothing_to_do), Toast.LENGTH_LONG).show();
} else if (doAction == action.FOLLOW) {
account_follow.setEnabled(false);
PostActionsVM viewModel = new ViewModelProvider(ShowAccountActivity.this).get(PostActionsVM.class);
viewModel.post(FOLLOW, target, null).observe(ShowAccountActivity.this, apiResponse -> manageVIewPostActions(FOLLOW, apiResponse));
} else if (doAction == action.UNFOLLOW) {
boolean confirm_unfollow = sharedpreferences.getBoolean(Helper.SET_UNFOLLOW_VALIDATION, true);
if (confirm_unfollow) {
AlertDialog.Builder unfollowConfirm = new AlertDialog.Builder(ShowAccountActivity.this);
unfollowConfirm.setTitle(getString(R.string.unfollow_confirm));
unfollowConfirm.setMessage(channel.getAcct());
unfollowConfirm.setNegativeButton(R.string.cancel, (dialog, which) -> dialog.dismiss());
unfollowConfirm.setPositiveButton(R.string.yes, (dialog, which) -> {
account_follow.setEnabled(false);
PostActionsVM viewModel = new ViewModelProvider(ShowAccountActivity.this).get(PostActionsVM.class);
viewModel.post(UNFOLLOW, target, null).observe(ShowAccountActivity.this, apiResponse -> manageVIewPostActions(UNFOLLOW, apiResponse));
dialog.dismiss();
});
unfollowConfirm.show();
} else {
account_follow.setEnabled(false);
PostActionsVM viewModel = new ViewModelProvider(ShowAccountActivity.this).get(PostActionsVM.class);
viewModel.post(UNFOLLOW, target, null).observe(ShowAccountActivity.this, apiResponse -> manageVIewPostActions(UNFOLLOW, apiResponse));
} }
}
});
}
public void manageVIewRelationship(APIResponse apiResponse) {
if (apiResponse.getError() != null) {
Toasty.error(ShowAccountActivity.this, apiResponse.getError().getError(), Toast.LENGTH_LONG).show();
return;
}
this.relationship = apiResponse.getRelationships();
manageButtonVisibility();
invalidateOptionsMenu();
}
//Manages the visibility of the button
private void manageButtonVisibility() {
if (relationship == null)
return;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
int[][] states = new int[][]{
new int[]{android.R.attr.state_enabled}, // enabled
new int[]{-android.R.attr.state_enabled}, // disabled
new int[]{-android.R.attr.state_checked}, // unchecked
new int[]{android.R.attr.state_pressed} // pressed
};
int[] colors = new int[]{
ContextCompat.getColor(ShowAccountActivity.this, Helper.getColorAccent()),
ContextCompat.getColor(ShowAccountActivity.this, Helper.getColorAccent()),
ContextCompat.getColor(ShowAccountActivity.this, Helper.getColorAccent()),
ContextCompat.getColor(ShowAccountActivity.this, Helper.getColorAccent())
};
account_follow.setBackgroundTintList(new ColorStateList(states, colors));
}
account_follow.setEnabled(true);
boolean isFollowing = relationship.get(0).get(channel.getAcct());
if (isFollowing) {
account_follow.setText(R.string.action_unfollow);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
account_follow.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(ShowAccountActivity.this, R.color.red_1)));
}
doAction = action.UNFOLLOW;
account_follow.setVisibility(View.VISIBLE);
} else {
account_follow.setText(R.string.action_follow);
doAction = action.FOLLOW;
account_follow.setVisibility(View.VISIBLE);
}
}
@Override @Override
public void onDestroy() { public void onDestroy() {
super.onDestroy(); super.onDestroy();
@ -345,47 +237,31 @@ public class ShowAccountActivity extends AppCompatActivity {
Toasty.error(ShowAccountActivity.this, apiResponse.getError().getError(), Toast.LENGTH_LONG).show(); Toasty.error(ShowAccountActivity.this, apiResponse.getError().getError(), Toast.LENGTH_LONG).show();
return; return;
} }
String target = channel.getAcct(); if (statusAction == RetrofitPeertubeAPI.ActionType.MUTE) {
//IF action is unfollow or mute, sends an intent to remove statuses
if (statusAction == RetrofitPeertubeAPI.ActionType.UNFOLLOW) {
Bundle b = new Bundle();
b.putString("receive_action", apiResponse.getTargetedId());
Intent intentBC = new Intent(Helper.RECEIVE_ACTION);
intentBC.putExtras(b);
}
if (statusAction == RetrofitPeertubeAPI.ActionType.UNFOLLOW || statusAction == RetrofitPeertubeAPI.ActionType.FOLLOW) {
RelationshipVM viewModel = new ViewModelProvider(ShowAccountActivity.this).get(RelationshipVM.class);
List<String> uris = new ArrayList<>();
uris.add(target);
viewModel.get(uris).observe(ShowAccountActivity.this, this::manageVIewRelationship);
} else if (statusAction == RetrofitPeertubeAPI.ActionType.MUTE) {
Toasty.info(ShowAccountActivity.this, getString(R.string.muted_done), Toast.LENGTH_LONG).show(); Toasty.info(ShowAccountActivity.this, getString(R.string.muted_done), Toast.LENGTH_LONG).show();
} }
} }
public void manageViewAccounts(APIResponse apiResponse) { public void manageViewAccounts(APIResponse apiResponse) {
if (apiResponse.getChannels() != null && apiResponse.getChannels().size() == 1) { if (apiResponse.getAccounts() != null && apiResponse.getAccounts().size() == 1) {
Channel channel = apiResponse.getChannels().get(0); AccountData.Account account = apiResponse.getAccounts().get(0);
if (this.channel == null) { if (this.account == null) {
this.channel = channel; this.account = account;
manageChannel(); manageAccount();
} }
if (channel.getOwnerAccount() != null) { subscriber_count.setText(getString(R.string.followers_count, Helper.withSuffix(account.getFollowersCount())));
this.channel.setOwnerAccount(channel.getOwnerAccount());
}
subscriber_count.setText(getString(R.string.followers_count, Helper.withSuffix(channel.getFollowersCount())));
subscriber_count.setVisibility(View.VISIBLE); subscriber_count.setVisibility(View.VISIBLE);
manageNotes(channel); manageNotes(account);
} }
} }
private void manageNotes(Channel channel) { private void manageNotes(AccountData.Account account) {
if (channel.getDescription() != null && channel.getDescription().compareTo("null") != 0 && channel.getDescription().trim().length() > 0) { if (account.getDescription() != null && account.getDescription().compareTo("null") != 0 && account.getDescription().trim().length() > 0) {
SpannableString spannableString; SpannableString spannableString;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
spannableString = new SpannableString(Html.fromHtml(channel.getDescription(), FROM_HTML_MODE_LEGACY)); spannableString = new SpannableString(Html.fromHtml(account.getDescription(), FROM_HTML_MODE_LEGACY));
else else
spannableString = new SpannableString(Html.fromHtml(channel.getDescription())); spannableString = new SpannableString(Html.fromHtml(account.getDescription()));
account_note.setText(spannableString, TextView.BufferType.SPANNABLE); account_note.setText(spannableString, TextView.BufferType.SPANNABLE);
account_note.setMovementMethod(LinkMovementMethod.getInstance()); account_note.setMovementMethod(LinkMovementMethod.getInstance());
@ -395,11 +271,6 @@ public class ShowAccountActivity extends AppCompatActivity {
} }
} }
public enum action {
FOLLOW,
UNFOLLOW,
NOTHING
}
/** /**
* Pager adapter for the 2 fragments * Pager adapter for the 2 fragments
@ -415,25 +286,24 @@ public class ShowAccountActivity extends AppCompatActivity {
public Fragment getItem(int position) { public Fragment getItem(int position) {
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
if (position == 0) { if (position == 0) {
DisplayChannelsFragment displayChannelsFragment = new DisplayChannelsFragment();
bundle.putString("name", account.getAcct());
bundle.putBoolean("myChannels", false);
displayChannelsFragment.setArguments(bundle);
return displayChannelsFragment;
}
DisplayVideosFragment displayVideosFragment = new DisplayVideosFragment(); DisplayVideosFragment displayVideosFragment = new DisplayVideosFragment();
bundle = new Bundle(); bundle.putSerializable(Helper.TIMELINE_TYPE, TimelineVM.TimelineType.ACCOUNT_VIDEOS);
bundle.putSerializable("type", TimelineVM.TimelineType.USER_VIDEOS); bundle.putString("channelId", account.getAcct());
bundle.putString("channelId", channel.getAcct()); bundle.putString("peertube_instance", account.getHost());
displayVideosFragment.setArguments(bundle); displayVideosFragment.setArguments(bundle);
return displayVideosFragment; return displayVideosFragment;
} }
DisplayAccountsFragment displayAccountsFragment = new DisplayAccountsFragment();
bundle.putString("targetedid", channel.getId());
bundle.putString("instance", getLiveInstance(ShowAccountActivity.this));
bundle.putString("name", channel.getAcct());
displayAccountsFragment.setArguments(bundle);
return displayAccountsFragment;
}
@Override @Override
public int getCount() { public int getCount() {
return 1; return 2;
} }
} }

View File

@ -17,6 +17,7 @@ package app.fedilab.fedilabtube;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.res.ColorStateList; import android.content.res.ColorStateList;
import android.database.sqlite.SQLiteDatabase;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.text.Html; import android.text.Html;
@ -54,10 +55,14 @@ import java.util.Map;
import app.fedilab.fedilabtube.client.APIResponse; import app.fedilab.fedilabtube.client.APIResponse;
import app.fedilab.fedilabtube.client.RetrofitPeertubeAPI; import app.fedilab.fedilabtube.client.RetrofitPeertubeAPI;
import app.fedilab.fedilabtube.client.data.AccountData;
import app.fedilab.fedilabtube.client.data.ChannelData.Channel; import app.fedilab.fedilabtube.client.data.ChannelData.Channel;
import app.fedilab.fedilabtube.drawer.OwnAccountsAdapter;
import app.fedilab.fedilabtube.fragment.DisplayAccountsFragment; import app.fedilab.fedilabtube.fragment.DisplayAccountsFragment;
import app.fedilab.fedilabtube.fragment.DisplayVideosFragment; import app.fedilab.fedilabtube.fragment.DisplayVideosFragment;
import app.fedilab.fedilabtube.helper.Helper; import app.fedilab.fedilabtube.helper.Helper;
import app.fedilab.fedilabtube.sqlite.AccountDAO;
import app.fedilab.fedilabtube.sqlite.Sqlite;
import app.fedilab.fedilabtube.viewmodel.ChannelsVM; import app.fedilab.fedilabtube.viewmodel.ChannelsVM;
import app.fedilab.fedilabtube.viewmodel.PostActionsVM; import app.fedilab.fedilabtube.viewmodel.PostActionsVM;
import app.fedilab.fedilabtube.viewmodel.RelationshipVM; import app.fedilab.fedilabtube.viewmodel.RelationshipVM;
@ -65,12 +70,12 @@ import app.fedilab.fedilabtube.viewmodel.TimelineVM;
import es.dmoral.toasty.Toasty; import es.dmoral.toasty.Toasty;
import static androidx.core.text.HtmlCompat.FROM_HTML_MODE_LEGACY; import static androidx.core.text.HtmlCompat.FROM_HTML_MODE_LEGACY;
import static app.fedilab.fedilabtube.MainActivity.TypeOfConnection.SURFING;
import static app.fedilab.fedilabtube.client.RetrofitPeertubeAPI.ActionType.FOLLOW; import static app.fedilab.fedilabtube.client.RetrofitPeertubeAPI.ActionType.FOLLOW;
import static app.fedilab.fedilabtube.client.RetrofitPeertubeAPI.ActionType.MUTE; import static app.fedilab.fedilabtube.client.RetrofitPeertubeAPI.ActionType.MUTE;
import static app.fedilab.fedilabtube.client.RetrofitPeertubeAPI.ActionType.REPORT_ACCOUNT; import static app.fedilab.fedilabtube.client.RetrofitPeertubeAPI.ActionType.REPORT_ACCOUNT;
import static app.fedilab.fedilabtube.client.RetrofitPeertubeAPI.ActionType.UNFOLLOW; import static app.fedilab.fedilabtube.client.RetrofitPeertubeAPI.ActionType.UNFOLLOW;
import static app.fedilab.fedilabtube.client.RetrofitPeertubeAPI.DataType.CHANNEL; import static app.fedilab.fedilabtube.client.RetrofitPeertubeAPI.DataType.CHANNEL;
import static app.fedilab.fedilabtube.helper.Helper.getLiveInstance;
import static app.fedilab.fedilabtube.helper.Helper.isLoggedIn; import static app.fedilab.fedilabtube.helper.Helper.isLoggedIn;
@ -81,17 +86,19 @@ public class ShowChannelActivity extends AppCompatActivity {
private ViewPager mPager; private ViewPager mPager;
private TabLayout tabLayout; private TabLayout tabLayout;
private TextView account_note, subscriber_count; private TextView account_note, subscriber_count;
private List<Map<String, Boolean>> relationship; private Map<String, Boolean> relationship;
private ImageView account_pp; private ImageView account_pp;
private TextView account_dn; private TextView account_dn;
private Channel channel; private Channel channel;
private action doAction; private action doAction;
private String channelAcct; private String channelAcct;
private boolean sepiaSearch;
private String peertubeInstance;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show_account); setContentView(R.layout.activity_show_channel);
setTitle(""); setTitle("");
Bundle b = getIntent().getExtras(); Bundle b = getIntent().getExtras();
account_follow = findViewById(R.id.account_follow); account_follow = findViewById(R.id.account_follow);
@ -103,6 +110,9 @@ public class ShowChannelActivity extends AppCompatActivity {
if (b != null) { if (b != null) {
channel = b.getParcelable("channel"); channel = b.getParcelable("channel");
channelAcct = b.getString("channelId"); channelAcct = b.getString("channelId");
sepiaSearch = b.getBoolean("sepia_search", false);
peertubeInstance = b.getString("peertube_instance", null);
} else { } else {
Toasty.error(ShowChannelActivity.this, getString(R.string.toast_error_loading_account), Toast.LENGTH_LONG).show(); Toasty.error(ShowChannelActivity.this, getString(R.string.toast_error_loading_account), Toast.LENGTH_LONG).show();
} }
@ -116,14 +126,65 @@ public class ShowChannelActivity extends AppCompatActivity {
ChannelsVM viewModel = new ViewModelProvider(ShowChannelActivity.this).get(ChannelsVM.class); ChannelsVM viewModel = new ViewModelProvider(ShowChannelActivity.this).get(ChannelsVM.class);
viewModel.get(CHANNEL, channelAcct == null ? channel.getAcct() : channelAcct).observe(ShowChannelActivity.this, this::manageViewAccounts); viewModel.get(sepiaSearch ? peertubeInstance : null, CHANNEL, channelAcct == null ? channel.getAcct() : channelAcct).observe(ShowChannelActivity.this, this::manageViewAccounts);
manageChannel(); manageChannel();
if (MainActivity.typeOfConnection == MainActivity.TypeOfConnection.SURFING) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
int[][] states = new int[][]{
new int[]{android.R.attr.state_enabled}, // enabled
new int[]{-android.R.attr.state_enabled}, // disabled
new int[]{-android.R.attr.state_checked}, // unchecked
new int[]{android.R.attr.state_pressed} // pressed
};
int[] colors = new int[]{
ContextCompat.getColor(ShowChannelActivity.this, Helper.getColorAccent()),
ContextCompat.getColor(ShowChannelActivity.this, Helper.getColorAccent()),
ContextCompat.getColor(ShowChannelActivity.this, Helper.getColorAccent()),
ContextCompat.getColor(ShowChannelActivity.this, Helper.getColorAccent())
};
account_follow.setBackgroundTintList(new ColorStateList(states, colors));
}
account_follow.setText(getString(R.string.action_follow));
account_follow.setEnabled(true);
new Thread(() -> {
try {
SQLiteDatabase db = Sqlite.getInstance(getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
List<AccountData.Account> accounts = new AccountDAO(ShowChannelActivity.this, db).getAllAccount();
runOnUiThread(() -> {
account_follow.setVisibility(View.VISIBLE);
account_follow.setOnClickListener(v -> {
AlertDialog.Builder builderSingle = new AlertDialog.Builder(ShowChannelActivity.this);
builderSingle.setTitle(getString(R.string.list_of_accounts));
if (accounts != null) {
final OwnAccountsAdapter accountsListAdapter = new OwnAccountsAdapter(ShowChannelActivity.this, accounts);
builderSingle.setAdapter(accountsListAdapter, (dialog, which) -> {
new Thread(() -> {
try {
RetrofitPeertubeAPI peertubeAPI = new RetrofitPeertubeAPI(ShowChannelActivity.this, accounts.get(which).getHost(), accounts.get(which).getToken());
peertubeAPI.post(FOLLOW, channel.getAcct(), null);
} catch (Exception e) {
e.printStackTrace();
}
}).start();
});
}
builderSingle.setNegativeButton(R.string.cancel, (dialog, which) -> dialog.dismiss());
builderSingle.show();
});
});
} catch (Exception e) {
e.printStackTrace();
}
}).start();
}
} }
@Override @Override
public boolean onCreateOptionsMenu(@NotNull Menu menu) { public boolean onCreateOptionsMenu(@NotNull Menu menu) {
getMenuInflater().inflate(R.menu.main_account, menu); getMenuInflater().inflate(R.menu.main_account, menu);
if (!Helper.isLoggedIn(ShowChannelActivity.this)) { if (!Helper.isLoggedIn(ShowChannelActivity.this) || sepiaSearch) {
menu.findItem(R.id.action_mute).setVisible(false); menu.findItem(R.id.action_mute).setVisible(false);
} }
return true; return true;
@ -155,6 +216,24 @@ public class ShowChannelActivity extends AppCompatActivity {
}); });
androidx.appcompat.app.AlertDialog alertDialog = dialogBuilder.create(); androidx.appcompat.app.AlertDialog alertDialog = dialogBuilder.create();
alertDialog.show(); alertDialog.show();
} else if (item.getItemId() == R.id.action_share && channel != null) {
Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.shared_via));
String extra_text = channel.getUrl();
sendIntent.putExtra(Intent.EXTRA_TEXT, extra_text);
sendIntent.setType("text/plain");
try {
startActivity(Intent.createChooser(sendIntent, getString(R.string.share_with)));
} catch (Exception e) {
Toasty.error(ShowChannelActivity.this, getString(R.string.toast_error), Toasty.LENGTH_LONG).show();
}
} else if (item.getItemId() == R.id.action_display_account) {
Bundle b = new Bundle();
Intent intent = new Intent(ShowChannelActivity.this, ShowAccountActivity.class);
b.putParcelable("account", channel.getOwnerAccount());
b.putString("accountAcct", channel.getOwnerAccount().getAcct());
intent.putExtras(b);
startActivity(intent);
} }
return super.onOptionsItemSelected(item); return super.onOptionsItemSelected(item);
} }
@ -239,7 +318,7 @@ public class ShowChannelActivity extends AppCompatActivity {
manageNotes(channel); manageNotes(channel);
Helper.loadGiF(ShowChannelActivity.this, channel.getAvatar() != null ? channel.getAvatar().getPath() : null, account_pp); Helper.loadGiF(ShowChannelActivity.this, sepiaSearch ? peertubeInstance : null, channel.getAvatar() != null ? channel.getAvatar().getPath() : null, account_pp);
//Follow button //Follow button
String target = channel.getAcct(); String target = channel.getAcct();
@ -290,7 +369,7 @@ public class ShowChannelActivity extends AppCompatActivity {
//Manages the visibility of the button //Manages the visibility of the button
private void manageButtonVisibility() { private void manageButtonVisibility() {
if (relationship == null) if (relationship == null || MainActivity.typeOfConnection == SURFING)
return; return;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
@ -311,19 +390,18 @@ public class ShowChannelActivity extends AppCompatActivity {
} }
account_follow.setEnabled(true); account_follow.setEnabled(true);
boolean isFollowing = relationship.get(0).get(channel.getAcct()); boolean isFollowing = relationship.get(channel.getAcct());
if (isFollowing) { if (isFollowing) {
account_follow.setText(R.string.action_unfollow); account_follow.setText(R.string.action_unfollow);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
account_follow.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(ShowChannelActivity.this, R.color.red_1))); account_follow.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(ShowChannelActivity.this, R.color.red_1)));
} }
doAction = action.UNFOLLOW; doAction = action.UNFOLLOW;
account_follow.setVisibility(View.VISIBLE);
} else { } else {
account_follow.setText(R.string.action_follow); account_follow.setText(R.string.action_follow);
doAction = action.FOLLOW; doAction = action.FOLLOW;
account_follow.setVisibility(View.VISIBLE);
} }
account_follow.setVisibility(View.VISIBLE);
} }
@ -412,22 +490,15 @@ public class ShowChannelActivity extends AppCompatActivity {
@NotNull @NotNull
@Override @Override
public Fragment getItem(int position) { public Fragment getItem(int position) {
Bundle bundle = new Bundle();
if (position == 0) {
DisplayVideosFragment displayVideosFragment = new DisplayVideosFragment(); DisplayVideosFragment displayVideosFragment = new DisplayVideosFragment();
bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putSerializable("timelineType", TimelineVM.TimelineType.USER_VIDEOS); bundle.putSerializable(Helper.TIMELINE_TYPE, TimelineVM.TimelineType.CHANNEL_VIDEOS);
bundle.putString("channelId", channel.getAcct()); bundle.putString("channelId", channel.getAcct());
bundle.putString("peertube_instance", channel.getHost());
bundle.putBoolean("sepia_search", sepiaSearch);
displayVideosFragment.setArguments(bundle); displayVideosFragment.setArguments(bundle);
return displayVideosFragment; return displayVideosFragment;
} }
DisplayAccountsFragment displayAccountsFragment = new DisplayAccountsFragment();
bundle.putString("targetedid", channel.getId());
bundle.putString("instance", getLiveInstance(ShowChannelActivity.this));
bundle.putString("name", channel.getAcct());
displayAccountsFragment.setArguments(bundle);
return displayAccountsFragment;
}
@Override @Override

View File

@ -0,0 +1,170 @@
package app.fedilab.fedilabtube;
/* Copyright 2020 Thomas Schneider
*
* This file is a part of TubeLab
*
* This program is free software; you can redistribute it and/or modify it under the terms of the
* GNU General Public License as published by the Free Software Foundation; either version 3 of the
* License, or (at your option) any later version.
*
* TubeLab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
* Public License for more details.
*
* You should have received a copy of the GNU General Public License along with TubeLab; if not,
* see <http://www.gnu.org/licenses>. */
import android.app.AlertDialog;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentTransaction;
import androidx.lifecycle.ViewModelProvider;
import org.jetbrains.annotations.NotNull;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
import app.fedilab.fedilabtube.client.APIResponse;
import app.fedilab.fedilabtube.databinding.ActivitySearchResultBinding;
import app.fedilab.fedilabtube.fragment.DisplayVideosFragment;
import app.fedilab.fedilabtube.helper.Helper;
import app.fedilab.fedilabtube.viewmodel.TimelineVM;
import static app.fedilab.fedilabtube.viewmodel.TimelineVM.TimelineType.HISTORY;
public class VideosTimelineActivity extends AppCompatActivity {
private TimelineVM.TimelineType type;
private DisplayVideosFragment displayVideosFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivitySearchResultBinding binding = ActivitySearchResultBinding.inflate(getLayoutInflater());
View mainView = binding.getRoot();
setContentView(mainView);
if (getSupportActionBar() != null)
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Bundle b = getIntent().getExtras();
if (b != null)
type = (TimelineVM.TimelineType) b.get("type");
displayVideosFragment = null;
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
if (savedInstanceState == null) {
displayVideosFragment = new DisplayVideosFragment();
Bundle bundle = new Bundle();
bundle.putSerializable(Helper.TIMELINE_TYPE, type);
displayVideosFragment.setArguments(bundle);
ft.add(R.id.container, displayVideosFragment).addToBackStack(null).commit();
}
if (type == TimelineVM.TimelineType.MY_VIDEOS) {
setTitle(R.string.my_videos);
} else if (type == HISTORY) {
setTitle(R.string.my_history);
//TODO: uncomment when available
// binding.historyFilter.setVisibility(View.VISIBLE);
binding.historyFilterAll.setOnClickListener(v -> historyFilter(null));
binding.historyFilterToday.setOnClickListener(v -> {
Calendar cal = GregorianCalendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
cal.getTime();
historyFilter(cal.getTime());
});
binding.historyFilterLast7Days.setOnClickListener(v -> {
Calendar cal = GregorianCalendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.DAY_OF_YEAR, -7);
cal.getTime();
historyFilter(cal.getTime());
});
} else if (type == TimelineVM.TimelineType.MOST_LIKED) {
setTitle(R.string.title_most_liked);
}
}
private void historyFilter(Date date) {
String startDate = null;
if (date != null) {
SimpleDateFormat fmtOut = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.ENGLISH);
startDate = fmtOut.format(date);
}
if (displayVideosFragment != null) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
displayVideosFragment = new DisplayVideosFragment();
Bundle bundle = new Bundle();
bundle.putSerializable(Helper.TIMELINE_TYPE, HISTORY);
bundle.putSerializable("startDate", startDate);
displayVideosFragment.setArguments(bundle);
ft.replace(R.id.container, displayVideosFragment);
ft.addToBackStack(null);
ft.commit();
}
}
@Override
public boolean onCreateOptionsMenu(@NotNull Menu menu) {
if (type == HISTORY) {
getMenuInflater().inflate(R.menu.main_history, menu);
return true;
} else {
return super.onCreateOptionsMenu(menu);
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
finish();
return true;
} else if (item.getItemId() == R.id.action_delete) {
AlertDialog.Builder builder = new AlertDialog.Builder(VideosTimelineActivity.this);
builder.setTitle(R.string.delete_history);
builder.setMessage(R.string.delete_history_confirm);
builder.setIcon(android.R.drawable.ic_dialog_alert)
.setPositiveButton(R.string.delete, (dialog, which) -> {
TimelineVM viewModelFeeds = new ViewModelProvider(VideosTimelineActivity.this).get(TimelineVM.class);
viewModelFeeds.deleterHistory().observe(VideosTimelineActivity.this, this::manageVIewVideos);
dialog.dismiss();
})
.setNegativeButton(R.string.no, (dialog, which) -> dialog.dismiss())
.show();
return true;
}
return super.onOptionsItemSelected(item);
}
private void manageVIewVideos(APIResponse apiResponse) {
if (type == HISTORY) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
displayVideosFragment = new DisplayVideosFragment();
Bundle bundle = new Bundle();
bundle.putSerializable(Helper.TIMELINE_TYPE, HISTORY);
displayVideosFragment.setArguments(bundle);
ft.replace(R.id.container, displayVideosFragment);
ft.addToBackStack(null);
ft.commit();
}
}
}

View File

@ -129,11 +129,11 @@ public class WebviewActivity extends AppCompatActivity {
@Override @Override
public boolean onOptionsItemSelected(MenuItem item) { public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) { int itemId = item.getItemId();
case android.R.id.home: if (itemId == android.R.id.home) {
finish(); finish();
return true; return true;
case R.id.action_go: } else if (itemId == R.id.action_go) {
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
try { try {
startActivity(browserIntent); startActivity(browserIntent);
@ -141,9 +141,8 @@ public class WebviewActivity extends AppCompatActivity {
Toasty.error(WebviewActivity.this, getString(R.string.toast_error), Toast.LENGTH_LONG).show(); Toasty.error(WebviewActivity.this, getString(R.string.toast_error), Toast.LENGTH_LONG).show();
} }
return true; return true;
default:
return super.onOptionsItemSelected(item);
} }
return super.onOptionsItemSelected(item);
} }
public void setUrl(String newUrl) { public void setUrl(String newUrl) {

View File

@ -46,10 +46,11 @@ public class APIResponse {
private List<CommentData.Comment> comments = null; private List<CommentData.Comment> comments = null;
private List<Block> muted; private List<Block> muted;
private List<VideoPlaylist> videoPlaylist; private List<VideoPlaylist> videoPlaylist;
private CommentData.CommentThreadData commentThreadData;
private List<NotificationData.Notification> peertubeNotifications = null; private List<NotificationData.Notification> peertubeNotifications = null;
private List<PlaylistData.Playlist> playlists = null; private List<PlaylistData.Playlist> playlists = null;
private List<String> domains = null; private List<String> domains = null;
private List<Map<String, Boolean>> relationships = null; private Map<String, Boolean> relationships = null;
private List<CaptionData.Caption> captions = null; private List<CaptionData.Caption> captions = null;
private Error error = null; private Error error = null;
private String since_id, max_id; private String since_id, max_id;
@ -152,11 +153,11 @@ public class APIResponse {
this.statusCode = statusCode; this.statusCode = statusCode;
} }
public List<Map<String, Boolean>> getRelationships() { public Map<String, Boolean> getRelationships() {
return relationships; return relationships;
} }
public void setRelationships(List<Map<String, Boolean>> relationships) { public void setRelationships(Map<String, Boolean> relationships) {
this.relationships = relationships; this.relationships = relationships;
} }
@ -247,4 +248,12 @@ public class APIResponse {
public void setVideoExistPlaylist(Map<String, List<PlaylistExist>> videoExistPlaylist) { public void setVideoExistPlaylist(Map<String, List<PlaylistExist>> videoExistPlaylist) {
this.videoExistPlaylist = videoExistPlaylist; this.videoExistPlaylist = videoExistPlaylist;
} }
public CommentData.CommentThreadData getCommentThreadData() {
return commentThreadData;
}
public void setCommentThreadData(CommentData.CommentThreadData commentThreadData) {
this.commentThreadData = commentThreadData;
}
} }

View File

@ -29,6 +29,7 @@ import app.fedilab.fedilabtube.client.data.VideoData;
import app.fedilab.fedilabtube.client.data.VideoPlaylistData; import app.fedilab.fedilabtube.client.data.VideoPlaylistData;
import app.fedilab.fedilabtube.client.entities.CaptionsParams; import app.fedilab.fedilabtube.client.entities.CaptionsParams;
import app.fedilab.fedilabtube.client.entities.ChannelParams; import app.fedilab.fedilabtube.client.entities.ChannelParams;
import app.fedilab.fedilabtube.client.entities.NotificationSettings;
import app.fedilab.fedilabtube.client.entities.Oauth; import app.fedilab.fedilabtube.client.entities.Oauth;
import app.fedilab.fedilabtube.client.entities.OverviewVideo; import app.fedilab.fedilabtube.client.entities.OverviewVideo;
import app.fedilab.fedilabtube.client.entities.PlaylistExist; import app.fedilab.fedilabtube.client.entities.PlaylistExist;
@ -55,8 +56,9 @@ import retrofit2.http.Path;
import retrofit2.http.Query; import retrofit2.http.Query;
import retrofit2.http.QueryMap; import retrofit2.http.QueryMap;
@SuppressWarnings({"unused", "RedundantSuppression"})
public interface PeertubeService { public interface PeertubeService {
@GET("instances") @GET("instances")
Call<InstanceData> getInstances(@QueryMap Map<String, String> params, @Query("nsfwPolicy[]") String nsfwPolicy, @Query("categoriesOr[]") List<Integer> categories, @Query("languagesOr[]") List<String> languages); Call<InstanceData> getInstances(@QueryMap Map<String, String> params, @Query("nsfwPolicy[]") String nsfwPolicy, @Query("categoriesOr[]") List<Integer> categories, @Query("languagesOr[]") List<String> languages);
@ -64,8 +66,12 @@ public interface PeertubeService {
@GET(".well-known/nodeinfo") @GET(".well-known/nodeinfo")
Call<WellKnownNodeinfo> getWellKnownNodeinfo(); Call<WellKnownNodeinfo> getWellKnownNodeinfo();
//Instance info
@GET("config/about")
Call<InstanceData.InstanceInfo> configAbout();
@GET("{nodeInfoPath}") @GET("{nodeInfoPath}")
Call<WellKnownNodeinfo.NodeInfo> getNodeinfo(@Path("nodeInfoPath") String nodeInfoPath); Call<WellKnownNodeinfo.NodeInfo> getNodeinfo(@Path(value = "nodeInfoPath", encoded = true) String nodeInfoPath);
@GET("{captionContent}") @GET("{captionContent}")
Call<String> getCaptionContent(@Path("captionContent") String captionContent); Call<String> getCaptionContent(@Path("captionContent") String captionContent);
@ -113,58 +119,118 @@ public interface PeertubeService {
@GET("users/me") @GET("users/me")
Call<UserMe> verifyCredentials(@Header("Authorization") String credentials); Call<UserMe> verifyCredentials(@Header("Authorization") String credentials);
@FormUrlEncoded
@PUT("videos/{id}/watching")
Call<String> addToHistory(
@Header("Authorization") String credentials,
@Path("id") String id,
@Field("currentTime") long currentTime);
@FormUrlEncoded
@PUT("users/me")
Call<String> updateUser(
@Header("Authorization") String credentials,
@Field("videosHistoryEnabled") Boolean videosHistoryEnabled,
@Field("autoPlayVideo") Boolean autoPlayVideo,
@Field("autoPlayNextVideo") Boolean autoPlayNextVideo,
@Field("webTorrentEnabled") Boolean webTorrentEnabled,
@Field("videoLanguages") List<String> videoLanguages,
@Field("description") String description,
@Field("displayName") String displayName,
@Field("nsfwPolicy") String nsfwPolicy
);
@Multipart
@POST("users/me/avatar/pick")
Call<UserMe.AvatarResponse> updateProfilePicture(
@Header("Authorization") String credentials,
@Part MultipartBody.Part avatarfile);
//Timelines Authenticated //Timelines Authenticated
//Subscriber timeline //Subscriber timeline
@GET("users/me/subscriptions/videos?sort=-publishedAt") @GET("users/me/subscriptions/videos?sort=-publishedAt")
Call<VideoData> getSubscriptionVideos(@Header("Authorization") String credentials, @Query("start") String maxId, @Query("languageOneOf") List<String> languageOneOf); Call<VideoData> getSubscriptionVideos(@Header("Authorization") String credentials, @Query("start") String maxId, @Query("count") String count, @Query("languageOneOf") List<String> languageOneOf);
//Overview videos //Overview videos
@GET("overviews/videos") @GET("overviews/videos")
Call<OverviewVideo> getOverviewVideos(@Query("page") String page, @Query("languageOneOf") List<String> languageOneOf); Call<OverviewVideo> getOverviewVideos(@Header("Authorization") String credentials, @Query("page") String page, @Query("languageOneOf") List<String> languageOneOf);
//Most liked videos //Most liked videos
@GET("videos?sort=-likes") @GET("videos?sort=-likes")
Call<VideoData> getMostLikedVideos(@Query("start") String maxId, @Query("languageOneOf") List<String> languageOneOf); Call<VideoData> getMostLikedVideos(@Header("Authorization") String credentials, @Query("start") String maxId, @Query("count") String count, @Query("languageOneOf") List<String> languageOneOf);
//Most liked videos //Trending videos
@GET("videos?sort=-trending") @GET("videos?sort=-trending")
Call<VideoData> getTrendingVideos(@Query("start") String maxId, @Query("languageOneOf") List<String> languageOneOf); Call<VideoData> getTrendingVideos(@Header("Authorization") String credentials, @Query("start") String maxId, @Query("count") String count, @Query("languageOneOf") List<String> languageOneOf);
//Recently added videos //Recently added videos
@GET("videos?sort=-publishedAt") @GET("videos?sort=-publishedAt")
Call<VideoData> getRecentlyAddedVideos(@Query("start") String maxId, @Query("languageOneOf") List<String> languageOneOf); Call<VideoData> getRecentlyAddedVideos(@Header("Authorization") String credentials, @Query("start") String maxId, @Query("count") String count, @Query("languageOneOf") List<String> languageOneOf);
//Local videos //Local videos
@GET("videos?sort=-publishedAt&filter=local") @GET("videos?sort=-publishedAt&filter=local")
Call<VideoData> getLocalVideos(@Query("start") String maxId, @Query("languageOneOf") List<String> languageOneOf); Call<VideoData> getLocalVideos(@Header("Authorization") String credentials, @Query("start") String maxId, @Query("count") String count, @Query("languageOneOf") List<String> languageOneOf);
//History //History
@GET("users/me/history/videos") @GET("users/me/history/videos")
Call<VideoData> getHistory(@Header("Authorization") String credentials, @Query("start") String maxId); Call<VideoData> getHistory(
@Header("Authorization") String credentials,
@Query("start") String maxId,
@Query("count") String count,
@Query("startDate") String startDate,
@Query("endDate") String endDate
);
@POST("users/me/history/videos/remove")
Call<String> deleteHistory(
@Header("Authorization") String credentials);
//Search //Search
@GET("search/videos") @GET("search/videos")
Call<VideoData> searchVideos(@Query("search") String search, @Query("start") String maxId); Call<VideoData> searchVideos(
@Header("Authorization") String credentials,
@Query("search") String search,
@Query("start") String maxId,
@Query("count") String count);
//Search
@GET("search/videos")
Call<VideoData> searchNextVideo(
@Header("Authorization") String credentials,
@Query("tagsOneOf") List<String> tagsOneOf,
@Query("start") String maxId,
@Query("count") String count);
//Get notifications //Get notifications
@GET("users/me/notifications") @GET("users/me/notifications")
Call<NotificationData> getNotifications(@Header("Authorization") String credentials, @Query("start") String maxId, @Query("since_id") String sinceId); Call<NotificationData> getNotifications(@Header("Authorization") String credentials, @Query("start") String maxId, @Query("count") String count, @Query("since_id") String sinceId);
//Update Notification settings
@PUT("users/me/notification-settings")
Call<String> updateNotifications(@Header("Authorization") String credentials, @Body NotificationSettings notificationSettings);
//Get/Post/Update/Delete video //Get/Post/Update/Delete video
//Get a video //Get a video
@GET("videos/{id}") @GET("videos/{id}")
Call<VideoData.Video> getVideo(@Path("id") String id); Call<VideoData.Video> getVideo(@Path("id") String id);
//Get a video description
@GET("videos/{uuid}/description")
Call<VideoData.Description> getVideoDescription(@Path("uuid") String uuid);
@GET("videos/{id}") @GET("videos/{id}")
Call<VideoData.Video> getMyVideo(@Header("Authorization") String credentials, @Path("id") String id); Call<VideoData.Video> getMyVideo(@Header("Authorization") String credentials, @Path("id") String id);
//Get my video //Get my video
@GET("users/me/videos?sort=-publishedAt") @GET("users/me/videos?sort=-publishedAt")
Call<VideoData> getMyVideos(@Header("Authorization") String credentials, @Query("start") String maxId); Call<VideoData> getMyVideos(@Header("Authorization") String credentials, @Query("start") String maxId, @Query("count") String count);
//Get my video //Get my video
@GET("accounts/{name}/videos?sort=-publishedAt") @GET("accounts/{name}/videos?sort=-publishedAt")
Call<VideoData.Video> getVideosForAccount(@Query("start") String maxId); Call<VideoData> getVideosForAccount(@Path("name") String name, @Query("start") String maxId, @Query("count") String count);
@Multipart @Multipart
@PUT("videos/{id}") @PUT("videos/{id}")
@ -211,7 +277,7 @@ public interface PeertubeService {
Call<ChannelData> getAllChannels(); Call<ChannelData> getAllChannels();
@GET("video-channels/{channelHandle}/videos") @GET("video-channels/{channelHandle}/videos")
Call<VideoData> getChannelVideos(@Path("channelHandle") String channelHandle, @Query("start") String maxId); Call<VideoData> getChannelVideos(@Path("channelHandle") String channelHandle, @Query("start") String maxId, @Query("count") String count);
@POST("video-channels") @POST("video-channels")
Call<ChannelData.ChannelCreation> addChannel(@Header("Authorization") String credentials, @Body ChannelParams channelParams); Call<ChannelData.ChannelCreation> addChannel(@Header("Authorization") String credentials, @Body ChannelParams channelParams);
@ -227,6 +293,11 @@ public interface PeertubeService {
@GET("video-playlists") @GET("video-playlists")
Call<PlaylistData> getPlaylists(); Call<PlaylistData> getPlaylists();
//Get a single account
@GET("accounts/{accountHandle}")
Call<AccountData.Account> getAccount(@Path("accountHandle") String accountHandle);
//Get/Post/Update/Delete playlist //Get/Post/Update/Delete playlist
@GET("accounts/{accountHandle}/video-playlists") @GET("accounts/{accountHandle}/video-playlists")
Call<PlaylistData> getPlaylistsForAccount(@Header("Authorization") String credentials, @Path("accountHandle") String accountHandle); Call<PlaylistData> getPlaylistsForAccount(@Header("Authorization") String credentials, @Path("accountHandle") String accountHandle);
@ -235,10 +306,10 @@ public interface PeertubeService {
Call<PlaylistData.Playlist> getPlaylist(@Path("id") String id); Call<PlaylistData.Playlist> getPlaylist(@Path("id") String id);
@GET("video-playlists/{id}/videos") @GET("video-playlists/{id}/videos")
Call<VideoPlaylistData> getVideosPlayList(@Header("Authorization") String credentials, @Path("id") String id); Call<VideoPlaylistData> getVideosPlayList(@Header("Authorization") String credentials, @Path("id") String id, @Query("start") String maxId, @Query("count") String count);
@GET("users/me/video-playlists/videos-exist") @GET("users/me/video-playlists/videos-exist")
Call<Map<String, List<PlaylistExist>>> getVideoExistsInPlaylist(@Header("Authorization") String credentials, @Query("videoIds") String videoIds); Call<Map<String, List<PlaylistExist>>> getVideoExistsInPlaylist(@Header("Authorization") String credentials, @Query("videoIds") List<String> videoIds);
@Multipart @Multipart
@POST("video-playlists") @POST("video-playlists")
@ -287,13 +358,10 @@ public interface PeertubeService {
//Subscribe/Unsubscribe //Subscribe/Unsubscribe
//subscribers //subscribers
@GET("users/me/subscriptions") @GET("users/me/subscriptions")
Call<AccountData> getSubscription(@Header("Authorization") String credentials, @Query("start") String maxId); Call<ChannelData> getSubscription(@Header("Authorization") String credentials, @Query("start") String maxId, @Query("count") String count);
@GET("users/me/subscriptions/exist") @GET("users/me/subscriptions/exist")
Call<List<Map<String, Boolean>>> getSubscriptionsExist(@Header("Authorization") String credentials, @Query("uris") List<String> uris); Call<Map<String, Boolean>> getSubscriptionsExist(@Header("Authorization") String credentials, @Query("uris") List<String> uris);
@GET("users/me/subscriptions/exist")
Call<Map<String, Boolean>> getSubscriptionExists(@Header("Authorization") String credentials, @Query("uris") String uris);
@FormUrlEncoded @FormUrlEncoded
@POST("users/me/subscriptions") @POST("users/me/subscriptions")
@ -305,7 +373,7 @@ public interface PeertubeService {
//Mute/Unmute //Mute/Unmute
//Muted accounts //Muted accounts
@GET("users/me/blocklist/accounts") @GET("users/me/blocklist/accounts")
Call<BlockData> getMuted(@Header("Authorization") String credentials, @Query("start") String maxId); Call<BlockData> getMuted(@Header("Authorization") String credentials, @Query("start") String maxId, @Query("count") String count);
@FormUrlEncoded @FormUrlEncoded
@POST("users/me/blocklist/accounts") @POST("users/me/blocklist/accounts")
@ -327,25 +395,28 @@ public interface PeertubeService {
//Comment //Comment
@GET("videos/{id}/comment-threads") @GET("videos/{id}/comment-threads")
Call<CommentData> getComments(@Path("id") String id, @Query("start") String maxId); Call<CommentData> getComments(@Path("id") String id, @Query("start") String maxId, @Query("count") String count);
@GET("videos/{id}/comment-threads/{threadId}") @GET("videos/{id}/comment-threads/{threadId}")
Call<CommentData> getReplies(@Path("id") String id, @Path("threadId") String threadId); Call<CommentData.CommentThreadData> getReplies(@Path("id") String id, @Path("threadId") String threadId);
@FormUrlEncoded @FormUrlEncoded
@POST("videos/{id}/comment-threads") @POST("videos/{id}/comment-threads")
Call<String> postComment(@Header("Authorization") String credentials, @Path("id") String id, @Field("text") String text); Call<CommentData.CommentPosted> postComment(@Header("Authorization") String credentials, @Path("id") String id, @Field("text") String text);
@FormUrlEncoded @FormUrlEncoded
@POST("videos/{id}/comments/{commentId}") @POST("videos/{id}/comments/{commentId}")
Call<String> postReply(@Header("Authorization") String credentials, @Path("id") String id, @Path("commentId") String commentId, @Field("text") String text); Call<CommentData.CommentPosted> postReply(@Header("Authorization") String credentials, @Path("id") String id, @Path("commentId") String commentId, @Field("text") String text);
@DELETE("videos/{id}/comments/{commentId}") @DELETE("videos/{id}/comments/{commentId}")
Call<String> deleteComment(@Header("Authorization") String credentials, @Path("id") String id, @Path("commentId") String commentId); Call<String> deleteComment(@Header("Authorization") String credentials, @Path("id") String id, @Path("commentId") String commentId);
@POST("bulk/remove-comments-of")
Call<String> deleteAllCommentForAccount(@Header("Authorization") String credentials, @Field("accountName") String accountName, @Field("scope") String scope);
@Headers({"Content-Type: application/json", "Cache-Control: max-age=640000"}) @Headers({"Content-Type: application/json", "Cache-Control: max-age=640000"})
@POST("abuses") @POST("abuses")
Call<String> report( Call<Report.ReportReturn> report(
@Header("Authorization") String credentials, @Header("Authorization") String credentials,
@Body Report report); @Body Report report);

View File

@ -21,10 +21,14 @@ import android.content.SharedPreferences;
import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase;
import android.os.Handler; import android.os.Handler;
import android.os.Looper; import android.os.Looper;
import android.webkit.MimeTypeMap;
import java.io.ByteArrayOutputStream;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.URLDecoder; import java.net.URLDecoder;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
@ -60,6 +64,7 @@ import app.fedilab.fedilabtube.client.entities.Rating;
import app.fedilab.fedilabtube.client.entities.Report; import app.fedilab.fedilabtube.client.entities.Report;
import app.fedilab.fedilabtube.client.entities.Token; import app.fedilab.fedilabtube.client.entities.Token;
import app.fedilab.fedilabtube.client.entities.UserMe; import app.fedilab.fedilabtube.client.entities.UserMe;
import app.fedilab.fedilabtube.client.entities.UserSettings;
import app.fedilab.fedilabtube.client.entities.VideoParams; import app.fedilab.fedilabtube.client.entities.VideoParams;
import app.fedilab.fedilabtube.client.entities.WellKnownNodeinfo; import app.fedilab.fedilabtube.client.entities.WellKnownNodeinfo;
import app.fedilab.fedilabtube.helper.Helper; import app.fedilab.fedilabtube.helper.Helper;
@ -78,11 +83,13 @@ import retrofit2.Response;
import retrofit2.Retrofit; import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory; import retrofit2.converter.gson.GsonConverterFactory;
@SuppressWarnings({"unused", "RedundantSuppression"})
public class RetrofitPeertubeAPI { public class RetrofitPeertubeAPI {
private String finalUrl; private final String finalUrl;
private Context _context; private final Context _context;
private String instance; private final String instance;
private final String count;
private String token; private String token;
private Set<String> selection; private Set<String> selection;
@ -90,6 +97,8 @@ public class RetrofitPeertubeAPI {
_context = context; _context = context;
instance = Helper.getLiveInstance(context); instance = Helper.getLiveInstance(context);
finalUrl = "https://" + Helper.getLiveInstance(context) + "/api/v1/"; finalUrl = "https://" + Helper.getLiveInstance(context) + "/api/v1/";
SharedPreferences sharedpreferences = _context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
count = String.valueOf(sharedpreferences.getInt(Helper.SET_VIDEOS_PER_PAGE, Helper.VIDEOS_PER_PAGE));
} }
public RetrofitPeertubeAPI(Context context, String instance, String token) { public RetrofitPeertubeAPI(Context context, String instance, String token) {
@ -97,8 +106,11 @@ public class RetrofitPeertubeAPI {
this.instance = instance; this.instance = instance;
this.token = token; this.token = token;
finalUrl = "https://" + instance + "/api/v1/"; finalUrl = "https://" + instance + "/api/v1/";
SharedPreferences sharedpreferences = _context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
count = String.valueOf(sharedpreferences.getInt(Helper.SET_VIDEOS_PER_PAGE, Helper.VIDEOS_PER_PAGE));
} }
public static void updateCredential(Activity activity, String token, String client_id, String client_secret, String refresh_token, String host) { public static void updateCredential(Activity activity, String token, String client_id, String client_secret, String refresh_token, String host) {
new Thread(() -> { new Thread(() -> {
AccountData.Account account; AccountData.Account account;
@ -154,7 +166,11 @@ public class RetrofitPeertubeAPI {
} }
private String getToken() { private String getToken() {
if (token != null) {
return "Bearer " + token; return "Bearer " + token;
} else {
return null;
}
} }
private PeertubeService init() { private PeertubeService init() {
@ -221,6 +237,33 @@ public class RetrofitPeertubeAPI {
return null; return null;
} }
/**
* Retrieve notifications
*
* @return APIResponse
*/
public APIResponse getNotifications() {
APIResponse apiResponse = new APIResponse();
PeertubeService peertubeService = init();
Call<NotificationData> notificationsCall = peertubeService.getNotifications("Bearer " + token, "0", "40", null);
try {
Response<NotificationData> response = notificationsCall.execute();
if (response.isSuccessful() && response.body() != null) {
apiResponse.setPeertubeNotifications(response.body().data);
} else {
setError(apiResponse, response.code(), response.errorBody());
}
} catch (IOException e) {
Error error = new Error();
error.setError(_context.getString(R.string.toast_error));
apiResponse.setError(error);
e.printStackTrace();
}
return apiResponse;
}
/** /**
* Retrieve notifications * Retrieve notifications
* *
@ -231,7 +274,8 @@ public class RetrofitPeertubeAPI {
public APIResponse getNotifications(String max_id, String since_id) { public APIResponse getNotifications(String max_id, String since_id) {
APIResponse apiResponse = new APIResponse(); APIResponse apiResponse = new APIResponse();
PeertubeService peertubeService = init(); PeertubeService peertubeService = init();
Call<NotificationData> notificationsCall = peertubeService.getNotifications("Bearer " + token, max_id, since_id);
Call<NotificationData> notificationsCall = peertubeService.getNotifications("Bearer " + token, max_id, "20", since_id);
try { try {
Response<NotificationData> response = notificationsCall.execute(); Response<NotificationData> response = notificationsCall.execute();
if (response.isSuccessful() && response.body() != null) { if (response.isSuccessful() && response.body() != null) {
@ -284,7 +328,7 @@ public class RetrofitPeertubeAPI {
public APIResponse getVideosForChannel(String channelId, String max_id) { public APIResponse getVideosForChannel(String channelId, String max_id) {
APIResponse apiResponse = new APIResponse(); APIResponse apiResponse = new APIResponse();
PeertubeService peertubeService = init(); PeertubeService peertubeService = init();
Call<VideoData> videoCall = peertubeService.getChannelVideos(channelId, max_id); Call<VideoData> videoCall = peertubeService.getChannelVideos(channelId, max_id, count);
if (videoCall != null) { if (videoCall != null) {
try { try {
Response<VideoData> response = videoCall.execute(); Response<VideoData> response = videoCall.execute();
@ -303,32 +347,84 @@ public class RetrofitPeertubeAPI {
return apiResponse; return apiResponse;
} }
public APIResponse getTL(TimelineVM.TimelineType timelineType, String max_id) {
public APIResponse deleteHistory() {
APIResponse apiResponse = new APIResponse();
PeertubeService peertubeService = init();
Call<String> stringCall = peertubeService.deleteHistory(getToken());
if (stringCall != null) {
try {
Response<String> response = stringCall.execute();
if (response.isSuccessful() && response.body() != null) {
apiResponse.setActionReturn(response.body());
} else {
setError(apiResponse, response.code(), response.errorBody());
}
} catch (IOException e) {
Error error = new Error();
error.setError(_context.getString(R.string.toast_error));
apiResponse.setError(error);
e.printStackTrace();
}
}
return apiResponse;
}
public APIResponse getHistory(String max_id, String startDate, String endDate) {
APIResponse apiResponse = new APIResponse();
PeertubeService peertubeService = init();
Call<VideoData> videoCall = peertubeService.getHistory(getToken(), max_id, count, startDate, endDate);
if (videoCall != null) {
try {
Response<VideoData> response = videoCall.execute();
if (response.isSuccessful() && response.body() != null) {
apiResponse.setPeertubes(response.body().data);
} else {
setError(apiResponse, response.code(), response.errorBody());
}
} catch (IOException e) {
Error error = new Error();
error.setError(_context.getString(R.string.toast_error));
apiResponse.setError(error);
e.printStackTrace();
}
}
return apiResponse;
}
public APIResponse getTL(TimelineVM.TimelineType timelineType, String max_id, String forAccount) {
APIResponse apiResponse = new APIResponse(); APIResponse apiResponse = new APIResponse();
PeertubeService peertubeService = init(); PeertubeService peertubeService = init();
Call<VideoData> videoCall = null; Call<VideoData> videoCall = null;
ArrayList<String> filter = selection != null ? new ArrayList<>(selection) : null; ArrayList<String> filter = selection != null ? new ArrayList<>(selection) : null;
switch (timelineType) { switch (timelineType) {
case MY_VIDEOS: case MY_VIDEOS:
videoCall = peertubeService.getMyVideos(getToken(), max_id); videoCall = peertubeService.getMyVideos(getToken(), max_id, count);
break;
case ACCOUNT_VIDEOS:
videoCall = peertubeService.getVideosForAccount(forAccount, max_id, count);
break; break;
case SUBSCRIBTIONS: case SUBSCRIBTIONS:
videoCall = peertubeService.getSubscriptionVideos(getToken(), max_id, filter); if (forAccount == null) {
videoCall = peertubeService.getSubscriptionVideos(getToken(), max_id, count, filter);
} else {
videoCall = peertubeService.getChannelVideos(forAccount, max_id, count);
}
break; break;
case MOST_LIKED: case MOST_LIKED:
videoCall = peertubeService.getMostLikedVideos(max_id, filter); videoCall = peertubeService.getMostLikedVideos(getToken(), max_id, count, filter);
break; break;
case LOCAL: case LOCAL:
videoCall = peertubeService.getLocalVideos(max_id, filter); videoCall = peertubeService.getLocalVideos(getToken(), max_id, count, filter);
break; break;
case TRENDING: case TRENDING:
videoCall = peertubeService.getTrendingVideos(max_id, filter); videoCall = peertubeService.getTrendingVideos(getToken(), max_id, count, filter);
break; break;
case HISTORY: case HISTORY:
videoCall = peertubeService.getHistory(getToken(), max_id); videoCall = peertubeService.getHistory(getToken(), max_id, count, null, null);
break; break;
case RECENT: case RECENT:
videoCall = peertubeService.getRecentlyAddedVideos(max_id, filter); videoCall = peertubeService.getRecentlyAddedVideos(getToken(), max_id, count, filter);
break; break;
} }
if (videoCall != null) { if (videoCall != null) {
@ -359,7 +455,7 @@ public class RetrofitPeertubeAPI {
APIResponse apiResponse = new APIResponse(); APIResponse apiResponse = new APIResponse();
PeertubeService peertubeService = init(); PeertubeService peertubeService = init();
ArrayList<String> filter = selection != null ? new ArrayList<>(selection) : null; ArrayList<String> filter = selection != null ? new ArrayList<>(selection) : null;
Call<OverviewVideo> overviewVideoCall = peertubeService.getOverviewVideos(page, filter); Call<OverviewVideo> overviewVideoCall = peertubeService.getOverviewVideos(getToken(), page, filter);
try { try {
Response<OverviewVideo> response = overviewVideoCall.execute(); Response<OverviewVideo> response = overviewVideoCall.execute();
if (response.isSuccessful() && response.body() != null) { if (response.isSuccessful() && response.body() != null) {
@ -378,21 +474,19 @@ public class RetrofitPeertubeAPI {
/** /**
* Check if users via their uris are following the authenticated user * Retrieves playlists for a video *synchronously*
* *
* @param uris List<String> * @param videoIds List<String> ids of videos
* @return APIResponse * @return APIResponse
*/ */
public APIResponse isFollowing(String uris) { public APIResponse getVideosExist(List<String> videoIds) {
APIResponse apiResponse = new APIResponse();
PeertubeService peertubeService = init(); PeertubeService peertubeService = init();
Call<Map<String, Boolean>> followingCall = peertubeService.getSubscriptionExists(getToken(), uris); APIResponse apiResponse = new APIResponse();
try { try {
Response<Map<String, Boolean>> response = followingCall.execute(); Call<Map<String, List<PlaylistExist>>> videoExistsInPlaylist = peertubeService.getVideoExistsInPlaylist(getToken(), videoIds);
if (response.isSuccessful()) { Response<Map<String, List<PlaylistExist>>> response = videoExistsInPlaylist.execute();
List<Map<String, Boolean>> relations = new ArrayList<>(); if (response.isSuccessful() && response.body() != null) {
relations.add(response.body()); apiResponse.setVideoExistPlaylist(response.body());
apiResponse.setRelationships(relations);
} else { } else {
setError(apiResponse, response.code(), response.errorBody()); setError(apiResponse, response.code(), response.errorBody());
} }
@ -402,6 +496,104 @@ public class RetrofitPeertubeAPI {
return apiResponse; return apiResponse;
} }
/**
* Update history
*
* @param videoId String
* @param currentTime int
*/
public void updateHistory(String videoId, long currentTime) {
APIResponse apiResponse = new APIResponse();
PeertubeService peertubeService = init();
Call<String> updateUser = peertubeService.addToHistory(getToken(),
videoId,
currentTime
);
try {
Response<String> response = updateUser.execute();
if (response.isSuccessful()) {
apiResponse.setActionReturn(response.body());
} else {
setError(apiResponse, response.code(), response.errorBody());
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* Update account information
*
* @param userSettings UserSettings
*/
public UserMe.AvatarResponse updateUser(UserSettings userSettings) throws IOException, Error {
APIResponse apiResponse = new APIResponse();
UserMe.AvatarResponse avatarResponse = null;
PeertubeService peertubeService = init();
Call<String> updateNotifications = peertubeService.updateNotifications(getToken(), userSettings.getNotificationSettings());
Response<String> responseNotif = updateNotifications.execute();
Call<String> updateUser = peertubeService.updateUser(getToken(),
userSettings.isVideosHistoryEnabled(),
userSettings.isAutoPlayVideo(),
userSettings.isAutoPlayNextVideo(),
userSettings.isWebTorrentEnabled(),
userSettings.getVideoLanguages(),
userSettings.getDescription(),
userSettings.getDisplayName(),
userSettings.getNsfwPolicy()
);
Response<String> response = updateUser.execute();
if (response.isSuccessful()) {
apiResponse.setActionReturn(response.body());
} else {
setError(apiResponse, response.code(), response.errorBody());
Error error = new Error();
error.setStatusCode(response.code());
if (response.errorBody() != null) {
error.setError(response.errorBody().string());
} else {
error.setError(_context.getString(R.string.toast_error));
}
throw error;
}
if (userSettings.getAvatarfile() != null) {
InputStream inputStream = _context.getContentResolver().openInputStream(userSettings.getAvatarfile());
ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
int len;
while ((len = inputStream.read(buffer)) != -1) {
byteBuffer.write(buffer, 0, len);
}
byte[] imageBytes = byteBuffer.toByteArray();
String mime = MimeTypeMap.getFileExtensionFromUrl(userSettings.getAvatarfile().toString());
if (mime == null || mime.trim().length() == 0) {
mime = "png";
}
RequestBody requestFile = RequestBody.create(MediaType.parse("image/" + mime), imageBytes);
MultipartBody.Part bodyThumbnail = MultipartBody.Part.createFormData("avatarfile", userSettings.getFileName(), requestFile);
Call<UserMe.AvatarResponse> updateProfilePicture = peertubeService.updateProfilePicture(getToken(), bodyThumbnail);
Response<UserMe.AvatarResponse> responseAvatar = updateProfilePicture.execute();
if (response.isSuccessful()) {
avatarResponse = responseAvatar.body();
} else {
setError(apiResponse, response.code(), response.errorBody());
Error error = new Error();
error.setStatusCode(response.code());
if (response.errorBody() != null) {
error.setError(response.errorBody().string());
} else {
error.setError(_context.getString(R.string.toast_error));
}
throw error;
}
}
return avatarResponse;
}
/** /**
* Check if users via their uris are following the authenticated user * Check if users via their uris are following the authenticated user
* *
@ -411,9 +603,9 @@ public class RetrofitPeertubeAPI {
public APIResponse areFollowing(List<String> uris) { public APIResponse areFollowing(List<String> uris) {
APIResponse apiResponse = new APIResponse(); APIResponse apiResponse = new APIResponse();
PeertubeService peertubeService = init(); PeertubeService peertubeService = init();
Call<List<Map<String, Boolean>>> followingCall = peertubeService.getSubscriptionsExist(getToken(), uris); Call<Map<String, Boolean>> followingCall = peertubeService.getSubscriptionsExist(getToken(), uris);
try { try {
Response<List<Map<String, Boolean>>> response = followingCall.execute(); Response<Map<String, Boolean>> response = followingCall.execute();
if (response.isSuccessful()) { if (response.isSuccessful()) {
apiResponse.setRelationships(response.body()); apiResponse.setRelationships(response.body());
} else { } else {
@ -450,6 +642,26 @@ public class RetrofitPeertubeAPI {
return apiResponse; return apiResponse;
} }
/**
* About the instance
*
* @return AboutInstance
*/
public InstanceData.AboutInstance getAboutInstance() {
PeertubeService peertubeService = init();
Call<InstanceData.InstanceInfo> about = peertubeService.configAbout();
try {
Response<InstanceData.InstanceInfo> response = about.execute();
if (response.isSuccessful() && response.body() != null) {
return response.body().getInstance();
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/** /**
* Returns informations about Peertube such privacies, licenses, etc. * Returns informations about Peertube such privacies, licenses, etc.
* *
@ -543,10 +755,17 @@ public class RetrofitPeertubeAPI {
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
String lang = null; String lang = Locale.getDefault().getLanguage();
if (PeertubeInformation.langueMapped.containsKey(Locale.getDefault().getLanguage())) if (lang.contains("-")) {
lang = PeertubeInformation.langueMapped.get(Locale.getDefault().getLanguage()); if (!lang.split("-")[0].trim().toLowerCase().startsWith("zh")) {
lang = lang.split("-")[0];
} else {
lang = lang.split("-")[0] + "-" + lang.split("-")[1].toUpperCase();
}
}
if (lang == null || lang.trim().length() == 0) {
lang = "en";
}
Call<Map<String, String>> translations = initTranslation().getTranslations(lang); Call<Map<String, String>> translations = initTranslation().getTranslations(lang);
try { try {
Response<Map<String, String>> response = translations.execute(); Response<Map<String, String>> response = translations.execute();
@ -555,6 +774,15 @@ public class RetrofitPeertubeAPI {
} else { } else {
Error error = new Error(); Error error = new Error();
error.setStatusCode(response.code()); error.setStatusCode(response.code());
if (response.errorBody() != null) {
translations = initTranslation().getTranslations("en");
try {
response = translations.execute();
if (response.isSuccessful()) {
peertubeInformation.setTranslations(response.body());
} else {
error = new Error();
error.setStatusCode(response.code());
if (response.errorBody() != null) { if (response.errorBody() != null) {
error.setError(response.errorBody().string()); error.setError(response.errorBody().string());
} else { } else {
@ -564,6 +792,13 @@ public class RetrofitPeertubeAPI {
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
} else {
error.setError(_context.getString(R.string.toast_error));
}
}
} catch (IOException e) {
e.printStackTrace();
}
return peertubeInformation; return peertubeInformation;
} }
@ -602,6 +837,33 @@ public class RetrofitPeertubeAPI {
return apiResponse; return apiResponse;
} }
/**
* Retrieves next peertube videos *synchronously*
*
* @param tags List<String> search
* @return APIResponse
*/
public APIResponse searchNextVideos(List<String> tags) {
PeertubeService peertubeService = init();
Call<VideoData> searchVideosCall = peertubeService.searchNextVideo(getToken(), tags, "0", "20");
APIResponse apiResponse = new APIResponse();
try {
Response<VideoData> response = searchVideosCall.execute();
if (response.isSuccessful() && response.body() != null) {
apiResponse.setPeertubes(response.body().data);
} else {
setError(apiResponse, response.code(), response.errorBody());
}
} catch (IOException e) {
Error error = new Error();
error.setError(_context.getString(R.string.toast_error));
apiResponse.setError(error);
e.printStackTrace();
}
return apiResponse;
}
/** /**
* Retrieves peertube search *synchronously* * Retrieves peertube search *synchronously*
* *
@ -610,7 +872,7 @@ public class RetrofitPeertubeAPI {
*/ */
public APIResponse searchPeertube(String query, String max_id) { public APIResponse searchPeertube(String query, String max_id) {
PeertubeService peertubeService = init(); PeertubeService peertubeService = init();
Call<VideoData> searchVideosCall = peertubeService.searchVideos(query, max_id); Call<VideoData> searchVideosCall = peertubeService.searchVideos(getToken(), query, max_id, count);
APIResponse apiResponse = new APIResponse(); APIResponse apiResponse = new APIResponse();
try { try {
Response<VideoData> response = searchVideosCall.execute(); Response<VideoData> response = searchVideosCall.execute();
@ -661,12 +923,12 @@ public class RetrofitPeertubeAPI {
public APIResponse report(Report report) { public APIResponse report(Report report) {
PeertubeService peertubeService = init(); PeertubeService peertubeService = init();
Call<String> report1 = peertubeService.report(getToken(), report); Call<Report.ReportReturn> report1 = peertubeService.report(getToken(), report);
APIResponse apiResponse = new APIResponse(); APIResponse apiResponse = new APIResponse();
try { try {
Response<String> response = report1.execute(); Response<Report.ReportReturn> response = report1.execute();
if (response.isSuccessful()) { if (response.isSuccessful() && response.body() != null) {
apiResponse.setActionReturn(response.body()); apiResponse.setActionReturn(response.body().getItemStr().getLabel());
} else { } else {
setError(apiResponse, response.code(), response.errorBody()); setError(apiResponse, response.code(), response.errorBody());
} }
@ -785,6 +1047,9 @@ public class RetrofitPeertubeAPI {
case PEERTUBEDELETECOMMENT: case PEERTUBEDELETECOMMENT:
postCall = peertubeService.deleteComment(getToken(), id, element); postCall = peertubeService.deleteComment(getToken(), id, element);
break; break;
case PEERTUBE_DELETE_ALL_COMMENT_FOR_ACCOUNT:
postCall = peertubeService.deleteAllCommentForAccount(getToken(), id, element);
break;
case DELETE_CHANNEL: case DELETE_CHANNEL:
postCall = peertubeService.deleteChannel(getToken(), id); postCall = peertubeService.deleteChannel(getToken(), id);
break; break;
@ -807,6 +1072,57 @@ public class RetrofitPeertubeAPI {
return apiResponse; return apiResponse;
} }
/**
* Get single account by its handle
*
* @param accountHandle String
* @return APIResponse
*/
public APIResponse getAccount(String accountHandle) {
PeertubeService peertubeService = init();
Call<AccountData.Account> accountDataCall = peertubeService.getAccount(accountHandle);
APIResponse apiResponse = new APIResponse();
if (accountDataCall != null) {
try {
Response<AccountData.Account> response = accountDataCall.execute();
if (response.isSuccessful() && response.body() != null) {
List<AccountData.Account> accountList = new ArrayList<>();
accountList.add(response.body());
apiResponse.setAccounts(accountList);
} else {
setError(apiResponse, response.code(), response.errorBody());
}
} catch (IOException e) {
Error error = new Error();
error.setError(_context.getString(R.string.toast_error));
apiResponse.setError(error);
e.printStackTrace();
}
}
return apiResponse;
}
/**
* Get video description
*
* @param uuid String (pagination)
* @return APIResponse
*/
public VideoData.Description getVideoDescription(String uuid) {
PeertubeService peertubeService = init();
Call<VideoData.Description> videoDescription = peertubeService.getVideoDescription(uuid);
try {
Response<VideoData.Description> response = videoDescription.execute();
if (response.isSuccessful() && response.body() != null) {
return response.body();
}
} catch (IOException ignored) {
}
return null;
}
/** /**
* Get muted accounts * Get muted accounts
* *
@ -815,7 +1131,7 @@ public class RetrofitPeertubeAPI {
*/ */
public APIResponse getMuted(String maxId) { public APIResponse getMuted(String maxId) {
PeertubeService peertubeService = init(); PeertubeService peertubeService = init();
Call<BlockData> accountDataCall = peertubeService.getMuted("Bearer " + token, maxId); Call<BlockData> accountDataCall = peertubeService.getMuted("Bearer " + token, maxId, count);
APIResponse apiResponse = new APIResponse(); APIResponse apiResponse = new APIResponse();
if (accountDataCall != null) { if (accountDataCall != null) {
try { try {
@ -843,13 +1159,13 @@ public class RetrofitPeertubeAPI {
*/ */
public APIResponse getSubscribtions(String maxId) { public APIResponse getSubscribtions(String maxId) {
PeertubeService peertubeService = init(); PeertubeService peertubeService = init();
Call<AccountData> accountDataCall = peertubeService.getSubscription("Bearer " + token, maxId); Call<ChannelData> channelDataCall = peertubeService.getSubscription("Bearer " + token, maxId, count);
APIResponse apiResponse = new APIResponse(); APIResponse apiResponse = new APIResponse();
if (accountDataCall != null) { if (channelDataCall != null) {
try { try {
Response<AccountData> response = accountDataCall.execute(); Response<ChannelData> response = channelDataCall.execute();
if (response.isSuccessful() && response.body() != null) { if (response.isSuccessful() && response.body() != null) {
apiResponse.setAccounts(response.body().data); apiResponse.setChannels(response.body().data);
} else { } else {
setError(apiResponse, response.code(), response.errorBody()); setError(apiResponse, response.code(), response.errorBody());
} }
@ -933,13 +1249,18 @@ public class RetrofitPeertubeAPI {
* @return APIResponse * @return APIResponse
*/ */
public WellKnownNodeinfo.NodeInfo getNodeInfo() { public WellKnownNodeinfo.NodeInfo getNodeInfo() {
PeertubeService peertubeService = init(); PeertubeService peertubeService = initTranslation();
try { try {
Call<WellKnownNodeinfo> wellKnownNodeinfoCall = peertubeService.getWellKnownNodeinfo(); Call<WellKnownNodeinfo> wellKnownNodeinfoCall = peertubeService.getWellKnownNodeinfo();
Response<WellKnownNodeinfo> response = wellKnownNodeinfoCall.execute(); Response<WellKnownNodeinfo> response = wellKnownNodeinfoCall.execute();
if (response.isSuccessful() && response.body() != null) { if (response.isSuccessful() && response.body() != null) {
if (response.body().getHref() != null) { int size = response.body().getLinks().size();
Call<WellKnownNodeinfo.NodeInfo> nodeinfo = peertubeService.getNodeinfo(response.body().getHref()); String url = response.body().getLinks().get(size - 1).getHref();
if (size > 0 && url != null) {
peertubeService = initTranslation();
String path = new URL(url).getPath();
path = path.replaceFirst("/", "").trim();
Call<WellKnownNodeinfo.NodeInfo> nodeinfo = peertubeService.getNodeinfo(path);
Response<WellKnownNodeinfo.NodeInfo> responseNodeInfo = nodeinfo.execute(); Response<WellKnownNodeinfo.NodeInfo> responseNodeInfo = nodeinfo.execute();
return responseNodeInfo.body(); return responseNodeInfo.body();
} }
@ -968,7 +1289,6 @@ public class RetrofitPeertubeAPI {
try { try {
Response<ChannelData> response = channelDataCall.execute(); Response<ChannelData> response = channelDataCall.execute();
if (response.isSuccessful() && response.body() != null) { if (response.isSuccessful() && response.body() != null) {
apiResponse.setChannels(response.body().data); apiResponse.setChannels(response.body().data);
} else { } else {
setError(apiResponse, response.code(), response.errorBody()); setError(apiResponse, response.code(), response.errorBody());
@ -1054,30 +1374,6 @@ public class RetrofitPeertubeAPI {
} }
/**
* Retrieves playlists for a video *synchronously*
*
* @param videoIds List<String> ids of videos
* @return APIResponse
*/
public APIResponse getVideosExist(String videoIds) {
PeertubeService peertubeService = init();
APIResponse apiResponse = new APIResponse();
try {
Call<Map<String, List<PlaylistExist>>> videoExistsInPlaylist = peertubeService.getVideoExistsInPlaylist(getToken(), videoIds);
Response<Map<String, List<PlaylistExist>>> response = videoExistsInPlaylist.execute();
if (response.isSuccessful() && response.body() != null) {
apiResponse.setVideoExistPlaylist(response.body());
} else {
setError(apiResponse, response.code(), response.errorBody());
}
} catch (IOException e) {
e.printStackTrace();
}
return apiResponse;
}
/** /**
* Retrieves playlist *synchronously* * Retrieves playlist *synchronously*
* *
@ -1086,12 +1382,11 @@ public class RetrofitPeertubeAPI {
* @param videoId String id of the video * @param videoId String id of the video
* @return APIResponse * @return APIResponse
*/ */
public APIResponse playlistAction(PlaylistsVM.action type, String playlistId, String videoId, String acct) { public APIResponse playlistAction(PlaylistsVM.action type, String playlistId, String videoId, String acct, String max_id) {
PeertubeService peertubeService = init(); PeertubeService peertubeService = init();
APIResponse apiResponse = new APIResponse(); APIResponse apiResponse = new APIResponse();
try { try {
if (type == PlaylistsVM.action.GET_PLAYLIST_INFO) { if (type == PlaylistsVM.action.GET_PLAYLIST_INFO) {
Call<PlaylistData.Playlist> playlistCall = peertubeService.getPlaylist(playlistId); Call<PlaylistData.Playlist> playlistCall = peertubeService.getPlaylist(playlistId);
Response<PlaylistData.Playlist> response = playlistCall.execute(); Response<PlaylistData.Playlist> response = playlistCall.execute();
@ -1109,10 +1404,11 @@ public class RetrofitPeertubeAPI {
if (response.isSuccessful() && response.body() != null) { if (response.isSuccessful() && response.body() != null) {
apiResponse.setPlaylists(response.body().data); apiResponse.setPlaylists(response.body().data);
} else { } else {
setError(apiResponse, response.code(), response.errorBody()); setError(apiResponse, response.code(), response.errorBody());
} }
} else if (type == PlaylistsVM.action.GET_LIST_VIDEOS) { } else if (type == PlaylistsVM.action.GET_LIST_VIDEOS) {
Call<VideoPlaylistData> videosPlayList = peertubeService.getVideosPlayList(getToken(), playlistId); Call<VideoPlaylistData> videosPlayList = peertubeService.getVideosPlayList(getToken(), playlistId, max_id, count);
Response<VideoPlaylistData> response = videosPlayList.execute(); Response<VideoPlaylistData> response = videosPlayList.execute();
if (response.isSuccessful() && response.body() != null) { if (response.isSuccessful() && response.body() != null) {
apiResponse.setVideoPlaylist(response.body().data); apiResponse.setVideoPlaylist(response.body().data);
@ -1178,7 +1474,7 @@ public class RetrofitPeertubeAPI {
APIResponse apiResponse = new APIResponse(); APIResponse apiResponse = new APIResponse();
try { try {
if (type == CommentVM.action.GET_THREAD) { if (type == CommentVM.action.GET_THREAD) {
Call<CommentData> commentsCall = peertubeService.getComments(videoId, max_id); Call<CommentData> commentsCall = peertubeService.getComments(videoId, max_id, count);
Response<CommentData> response = commentsCall.execute(); Response<CommentData> response = commentsCall.execute();
if (response.isSuccessful() && response.body() != null) { if (response.isSuccessful() && response.body() != null) {
apiResponse.setComments(response.body().data); apiResponse.setComments(response.body().data);
@ -1186,10 +1482,10 @@ public class RetrofitPeertubeAPI {
setError(apiResponse, response.code(), response.errorBody()); setError(apiResponse, response.code(), response.errorBody());
} }
} else if (type == CommentVM.action.GET_REPLIES) { } else if (type == CommentVM.action.GET_REPLIES) {
Call<CommentData> commentsCall = peertubeService.getReplies(videoId, forCommentId); Call<CommentData.CommentThreadData> commentsCall = peertubeService.getReplies(videoId, forCommentId);
Response<CommentData> response = commentsCall.execute(); Response<CommentData.CommentThreadData> response = commentsCall.execute();
if (response.isSuccessful() && response.body() != null) { if (response.isSuccessful() && response.body() != null) {
apiResponse.setComments(response.body().data); apiResponse.setCommentThreadData(response.body());
} else { } else {
setError(apiResponse, response.code(), response.errorBody()); setError(apiResponse, response.code(), response.errorBody());
} }
@ -1218,18 +1514,22 @@ public class RetrofitPeertubeAPI {
APIResponse apiResponse = new APIResponse(); APIResponse apiResponse = new APIResponse();
try { try {
if (type == ActionType.ADD_COMMENT) { if (type == ActionType.ADD_COMMENT) {
Call<String> stringCall = peertubeService.postComment(getToken(), videoId, text); Call<CommentData.CommentPosted> commentPostedCall = peertubeService.postComment(getToken(), videoId, text);
Response<String> response = stringCall.execute(); Response<CommentData.CommentPosted> response = commentPostedCall.execute();
if (response.isSuccessful()) { if (response.isSuccessful() && response.body() != null) {
apiResponse.setActionReturn(response.body()); List<CommentData.Comment> comments = new ArrayList<>();
comments.add(response.body().getComment());
apiResponse.setComments(comments);
} else { } else {
setError(apiResponse, response.code(), response.errorBody()); setError(apiResponse, response.code(), response.errorBody());
} }
} else if (type == ActionType.REPLY) { } else if (type == ActionType.REPLY) {
Call<String> stringCall = peertubeService.postReply(getToken(), videoId, toCommentId, text); Call<CommentData.CommentPosted> commentPostedCall = peertubeService.postReply(getToken(), videoId, toCommentId, text);
Response<String> response = stringCall.execute(); Response<CommentData.CommentPosted> response = commentPostedCall.execute();
if (response.isSuccessful()) { if (response.isSuccessful() && response.body() != null) {
apiResponse.setActionReturn(response.body()); List<CommentData.Comment> comments = new ArrayList<>();
comments.add(response.body().getComment());
apiResponse.setComments(comments);
} else { } else {
setError(apiResponse, response.code(), response.errorBody()); setError(apiResponse, response.code(), response.errorBody());
} }
@ -1332,6 +1632,7 @@ public class RetrofitPeertubeAPI {
APIResponse apiResponse = new APIResponse(); APIResponse apiResponse = new APIResponse();
try { try {
Response<VideoData.Video> response = video.execute(); Response<VideoData.Video> response = video.execute();
if (response.isSuccessful()) { if (response.isSuccessful()) {
List<VideoData.Video> videos = new ArrayList<>(); List<VideoData.Video> videos = new ArrayList<>();
videos.add(response.body()); videos.add(response.body());
@ -1372,6 +1673,7 @@ public class RetrofitPeertubeAPI {
UNMUTE, UNMUTE,
RATEVIDEO, RATEVIDEO,
PEERTUBEDELETECOMMENT, PEERTUBEDELETECOMMENT,
PEERTUBE_DELETE_ALL_COMMENT_FOR_ACCOUNT,
PEERTUBEDELETEVIDEO, PEERTUBEDELETEVIDEO,
REPORT_VIDEO, REPORT_VIDEO,
REPORT_ACCOUNT, REPORT_ACCOUNT,

View File

@ -0,0 +1,86 @@
package app.fedilab.fedilabtube.client;
/* Copyright 2020 Thomas Schneider
*
* This file is a part of TubeLab
*
* This program is free software; you can redistribute it and/or modify it under the terms of the
* GNU General Public License as published by the Free Software Foundation; either version 3 of the
* License, or (at your option) any later version.
*
* TubeLab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
* Public License for more details.
*
* You should have received a copy of the GNU General Public License along with TubeLab; if not,
* see <http://www.gnu.org/licenses>. */
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Locale;
import app.fedilab.fedilabtube.client.data.VideoData;
import app.fedilab.fedilabtube.client.entities.SepiaSearch;
import retrofit2.Call;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class RetrofitSepiaSearchAPI {
private final String finalUrl;
public RetrofitSepiaSearchAPI() {
finalUrl = "https://search.joinpeertube.org/api/v1/";
}
private SepiaSearchService init() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(finalUrl)
.addConverterFactory(GsonConverterFactory.create())
.build();
return retrofit.create(SepiaSearchService.class);
}
/**
* Return videos for a sepia search
*
* @param sepiaSearch SepiaSearch
* @return VideoData
*/
public VideoData getVideos(SepiaSearch sepiaSearch) {
SepiaSearchService sepiaSearchService = init();
SimpleDateFormat fmtOut = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.ENGLISH);
String startDate = null;
if (sepiaSearch.getStartDate() != null) {
startDate = fmtOut.format(sepiaSearch.getStartDate());
}
Call<VideoData> videoDataCall = sepiaSearchService.getVideos(
sepiaSearch.getStart(),
sepiaSearch.getCount(),
sepiaSearch.getSearch(),
sepiaSearch.getDurationMin(),
sepiaSearch.getDurationMax(),
startDate,
sepiaSearch.getBoostLanguages(),
sepiaSearch.getCategoryOneOf(),
sepiaSearch.getLicenceOneOf(),
sepiaSearch.getTagsOneOf(),
sepiaSearch.getTagsAllOf(),
sepiaSearch.isNsfw(),
sepiaSearch.getSort());
try {
Response<VideoData> response = videoDataCall.execute();
if (response.isSuccessful() && response.body() != null) {
return response.body();
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}

View File

@ -0,0 +1,53 @@
package app.fedilab.fedilabtube.client;
/* Copyright 2020 Thomas Schneider
*
* This file is a part of TubeLab
*
* This program is free software; you can redistribute it and/or modify it under the terms of the
* GNU General Public License as published by the Free Software Foundation; either version 3 of the
* License, or (at your option) any later version.
*
* TubeLab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
* Public License for more details.
*
* You should have received a copy of the GNU General Public License along with TubeLab; if not,
* see <http://www.gnu.org/licenses>. */
import java.util.List;
import app.fedilab.fedilabtube.client.data.ChannelData;
import app.fedilab.fedilabtube.client.data.VideoData;
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Query;
interface SepiaSearchService {
@GET("search/videos")
Call<VideoData> getVideos(
@Query("start") String maxId,
@Query("count") String count,
@Query("search") String search,
@Query("durationMin") int durationMin,
@Query("durationMax") int durationMax,
@Query("startDate") String startDate,
@Query("boostLanguages") List<String> languageOneOf,
@Query("categoryOneOf") List<Integer> categoryOneOf,
@Query("licenceOneOf") List<Integer> licenceOneOf,
@Query("tagsOneOf") List<String> tagsOneOf,
@Query("tagsAllOf") List<String> tagsAllOf,
@Query("nsfw") boolean nsfw,
@Query("sort") String sort
);
@GET("search/channels")
Call<ChannelData> getChannels(
@Query("search") String search,
@Query("start") String maxId,
@Query("count") String count
);
}

View File

@ -25,7 +25,7 @@ import java.util.List;
import app.fedilab.fedilabtube.client.entities.Avatar; import app.fedilab.fedilabtube.client.entities.Avatar;
@SuppressWarnings("unused") @SuppressWarnings({"unused", "RedundantSuppression"})
public class AccountData { public class AccountData {
@SerializedName("total") @SerializedName("total")
@ -77,7 +77,7 @@ public class AccountData {
private String client_id; private String client_id;
private String client_secret; private String client_secret;
private String refresh_token; private String refresh_token;
private boolean selected;
public Account() { public Account() {
} }
@ -197,14 +197,6 @@ public class AccountData {
this.url = url; this.url = url;
} }
public boolean isSelected() {
return selected;
}
public void setSelected(boolean selected) {
this.selected = selected;
}
public String getAcct() { public String getAcct() {
return name + "@" + host; return name + "@" + host;
} }

View File

@ -19,6 +19,7 @@ import com.google.gson.annotations.SerializedName;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@SuppressWarnings({"unused", "RedundantSuppression"})
public class BlockData { public class BlockData {
@SerializedName("total") @SerializedName("total")

View File

@ -20,7 +20,7 @@ import java.util.List;
import app.fedilab.fedilabtube.client.entities.ItemStr; import app.fedilab.fedilabtube.client.entities.ItemStr;
@SuppressWarnings("unused") @SuppressWarnings({"unused", "RedundantSuppression"})
public class CaptionData { public class CaptionData {
@SerializedName("total") @SerializedName("total")

View File

@ -27,7 +27,7 @@ import app.fedilab.fedilabtube.client.entities.Avatar;
import app.fedilab.fedilabtube.client.entities.ItemStr; import app.fedilab.fedilabtube.client.entities.ItemStr;
import app.fedilab.fedilabtube.client.entities.ViewsPerDay; import app.fedilab.fedilabtube.client.entities.ViewsPerDay;
@SuppressWarnings("unused") @SuppressWarnings({"unused", "RedundantSuppression"})
public class ChannelData { public class ChannelData {
@SerializedName("total") @SerializedName("total")
@ -80,6 +80,7 @@ public class ChannelData {
@SerializedName("viewsPerDay") @SerializedName("viewsPerDay")
private List<ViewsPerDay> viewsPerDays; private List<ViewsPerDay> viewsPerDays;
private String acct; private String acct;
private boolean selected;
public Channel() { public Channel() {
} }
@ -243,6 +244,14 @@ public class ChannelData {
this.viewsPerDays = viewsPerDays; this.viewsPerDays = viewsPerDays;
} }
public boolean isSelected() {
return selected;
}
public void setSelected(boolean selected) {
this.selected = selected;
}
@Override @Override
public int describeContents() { public int describeContents() {
return 0; return 0;

View File

@ -19,7 +19,7 @@ import com.google.gson.annotations.SerializedName;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@SuppressWarnings("unused") @SuppressWarnings({"unused", "RedundantSuppression"})
public class CommentData { public class CommentData {
@SerializedName("total") @SerializedName("total")
@ -56,6 +56,8 @@ public class CommentData {
private String url; private String url;
@SerializedName("videoId") @SerializedName("videoId")
private String videoId; private String videoId;
private boolean isReply = false;
private boolean isReplyViewOpen = false;
public AccountData.Account getAccount() { public AccountData.Account getAccount() {
@ -161,8 +163,63 @@ public class CommentData {
public void setVideoId(String videoId) { public void setVideoId(String videoId) {
this.videoId = videoId; this.videoId = videoId;
} }
public boolean isReply() {
return isReply;
} }
public void setReply(boolean reply) {
isReply = reply;
}
public boolean isReplyViewOpen() {
return isReplyViewOpen;
}
public void setReplyViewOpen(boolean replyViewOpen) {
isReplyViewOpen = replyViewOpen;
}
}
public static class CommentThreadData {
@SerializedName("comment")
public Comment comment;
@SerializedName("children")
public List<CommentThreadData> children;
public Comment getComment() {
return comment;
}
public void setComment(Comment comment) {
this.comment = comment;
}
public List<CommentThreadData> getChildren() {
return children;
}
public void setChildren(List<CommentThreadData> children) {
this.children = children;
}
}
public static class CommentPosted {
@SerializedName("comment")
private Comment comment;
public Comment getComment() {
return comment;
}
public void setComment(Comment comment) {
this.comment = comment;
}
}
public static class NotificationComment { public static class NotificationComment {
@SerializedName("id") @SerializedName("id")
private String id; private String id;

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