Compare commits

...

189 Commits

Author SHA1 Message Date
Grishka
9a41a2d6fb Merge branch 'l10n_master' 2023-09-28 20:14:21 +03:00
Grishka
2cd98a6620 More crash fixes 2023-09-28 20:11:43 +03:00
Grishka
283b56be5b Finally fix the mysterious RecyclerView crash 2023-09-28 19:56:25 +03:00
Eugen Rochko
6d56771aba New translations strings.xml (Galician) 2023-09-28 16:51:59 +02:00
Grishka
1724d8a532 Probably fix #703 2023-09-27 19:50:59 +03:00
Eugen Rochko
b4cdf35d36 New translations strings.xml (Russian) 2023-09-25 23:39:42 +02:00
Eugen Rochko
cad0ad7a59 New translations strings.xml (Ukrainian) 2023-09-25 22:25:17 +02:00
Grishka
ca60003c39 Fix #682 2023-09-25 23:11:10 +03:00
Grishka
0f030e0bac Fix #683 2023-09-25 23:07:34 +03:00
Grishka
6d4f212a18 Probably need to set this too 2023-09-25 23:00:15 +03:00
Grishka
183b39bc24 Specify LED color for notifications
closes #695
2023-09-25 22:58:08 +03:00
Grishka
27ad0c6fcf Crash fixes 2023-09-25 22:52:51 +03:00
Grishka
b5f661f1af I forgot to increment the version code 2023-09-25 19:25:59 +03:00
Grishka
0015f3f0bf Merge branch 'l10n_master' 2023-09-25 19:22:38 +03:00
Eugen Rochko
c5d0fdd645 New translations strings.xml (Turkish) 2023-09-25 18:20:56 +02:00
Grishka
2d09ad44fb Merge branch 'l10n_master' 2023-09-25 19:18:24 +03:00
Eugen Rochko
667fffd124 New translations strings.xml (Chinese Traditional) 2023-09-25 18:18:22 +02:00
Eugen Rochko
699233d8c7 New translations strings.xml (Filipino) 2023-09-25 18:18:05 +02:00
Grishka
56aabdc4a6 Fix empty view text style
closes #701
2023-09-25 19:12:04 +03:00
Grishka
443e2c7a6f Add a tool to detect invalid formatting in localized strings 2023-09-25 18:51:49 +03:00
Eugen Rochko
985b0f6e63 New translations strings.xml (Filipino) 2023-09-25 17:49:57 +02:00
Grishka
cc86edf276 Fix #700 2023-09-25 17:18:42 +03:00
Grishka
4071b9342d Update appkit 2023-09-25 17:13:59 +03:00
Eugen Rochko
f71d1bc5d3 New translations strings.xml (Greek) 2023-09-24 23:27:13 +02:00
Eugen Rochko
6bcdbaba34 New translations strings.xml (Turkish) 2023-09-24 08:49:38 +02:00
Eugen Rochko
a2beead3a5 New translations strings.xml (Chinese Simplified) 2023-09-23 18:34:38 +02:00
Eugen Rochko
e7a25e353d New translations strings.xml (Japanese) 2023-09-23 14:15:37 +02:00
Eugen Rochko
af04a01130 New translations strings.xml (Japanese) 2023-09-23 13:16:04 +02:00
Grishka
fe1cfa1d7b Fix indexable setting 2023-09-22 21:33:21 +03:00
Eugen Rochko
b248797bb0 New translations strings.xml (Russian) 2023-09-22 20:28:14 +02:00
Grishka
f24eba08d3 Fix custom emojis in names setting 2023-09-22 21:27:30 +03:00
Eugen Rochko
0e89559a47 New translations strings.xml (Slovenian) 2023-09-22 19:30:53 +02:00
Eugen Rochko
d02a72e079 New translations strings.xml (Japanese) 2023-09-22 13:01:51 +02:00
Eugen Rochko
3be57d1b0b New translations strings.xml (Japanese) 2023-09-22 11:08:13 +02:00
Eugen Rochko
bed550e97c New translations strings.xml (Russian) 2023-09-22 09:19:11 +02:00
Eugen Rochko
7e2619ea75 New translations strings.xml (Italian) 2023-09-22 01:48:10 +02:00
Eugen Rochko
4b22f1d3a7 New translations strings.xml (Thai) 2023-09-21 21:39:59 +02:00
Eugen Rochko
9dcc7e293f New translations strings.xml (Icelandic) 2023-09-21 15:39:27 +02:00
Eugen Rochko
6a68cf5e41 New translations strings.xml (Persian) 2023-09-21 13:13:31 +02:00
Grishka
29297be4a3 Merge branch 'l10n_master' 2023-09-20 22:43:16 +03:00
Eugen Rochko
90b87529e0 New translations strings.xml (Swedish) 2023-09-20 21:16:11 +02:00
Grishka
39af05524d Privacy settings 2023-09-20 21:44:28 +03:00
Grishka
e3fb2cd03c Scroll profile tab views to top when tab is reselected 2023-09-20 14:47:25 +03:00
Gregory K
90f84d628a Merge pull request #694 from LucasGGamerM/mastodon-android
fix(compose): fix photoPicker not popping up when there is less than 2 spaces available for media
2023-09-20 14:10:26 +03:00
LucasGGamerM
b89e0b5c5a fix(compose): fix photoPicker not popping up when there is less than 2 spaces available for media 2023-09-20 07:55:23 -03:00
Eugen Rochko
aac89c354c New translations full_description.txt (Thai) 2023-09-18 20:35:41 +02:00
Eugen Rochko
a032f9af10 New translations strings.xml (French) 2023-09-18 20:34:32 +02:00
Eugen Rochko
642aaec6da New translations strings.xml (Persian) 2023-09-17 14:08:04 +02:00
Eugen Rochko
ff667d6aed New translations strings.xml (Persian) 2023-09-17 12:27:57 +02:00
Eugen Rochko
5e98496ea6 New translations strings.xml (Vietnamese) 2023-09-17 10:39:46 +02:00
Eugen Rochko
972fe1d15b New translations strings.xml (Italian) 2023-09-17 10:39:45 +02:00
Eugen Rochko
26eaa36faa New translations strings.xml (Finnish) 2023-09-17 10:39:44 +02:00
Grishka
c517f41595 Paginate search results 2023-09-17 11:20:12 +03:00
Grishka
56a6d7243f Crash fixes 2023-09-17 10:49:13 +03:00
Grishka
18e43dfc22 Crash fix 2023-09-17 10:32:59 +03:00
Grishka
816f6370ef Fix #690 2023-09-17 10:26:27 +03:00
Eugen Rochko
ebc2b2e59d New translations strings.xml (Arabic) 2023-09-15 11:51:46 +02:00
Eugen Rochko
c9a796dbfe New translations strings.xml (Arabic) 2023-09-15 10:16:56 +02:00
Eugen Rochko
1ba185ea9c New translations strings.xml (Vietnamese) 2023-09-15 03:45:44 +02:00
Eugen Rochko
a78be8bc1d New translations strings.xml (Chinese Traditional) 2023-09-14 12:55:27 +02:00
Eugen Rochko
abfb497577 New translations strings.xml (Chinese Traditional) 2023-09-14 11:17:24 +02:00
Eugen Rochko
a10b184508 New translations full_description.txt (Finnish) 2023-09-13 21:32:19 +02:00
Eugen Rochko
f0ea6660e6 New translations strings.xml (Finnish) 2023-09-13 21:32:18 +02:00
Eugen Rochko
a829f25d56 New translations strings.xml (Thai) 2023-09-13 20:36:48 +02:00
Eugen Rochko
deff3dd8e0 New translations strings.xml (Finnish) 2023-09-13 20:36:47 +02:00
Eugen Rochko
6c5fb5ea09 New translations strings.xml (Dutch) 2023-09-12 12:25:35 +02:00
Eugen Rochko
afe0c9e0db New translations strings.xml (Dutch) 2023-09-12 10:19:31 +02:00
Eugen Rochko
1f2213042f New translations strings.xml (Urdu (India)) 2023-09-12 06:51:43 +02:00
Eugen Rochko
5edd2466f9 New translations strings.xml (Kabyle) 2023-09-12 06:51:42 +02:00
Eugen Rochko
f3b3a1a577 New translations strings.xml (Igbo) 2023-09-12 06:51:41 +02:00
Eugen Rochko
068619b815 New translations strings.xml (Occitan) 2023-09-12 06:51:40 +02:00
Eugen Rochko
f121e94979 New translations strings.xml (Scottish Gaelic) 2023-09-12 06:51:39 +02:00
Eugen Rochko
b5b52529d4 New translations strings.xml (Sinhala) 2023-09-12 06:51:38 +02:00
Eugen Rochko
876bf73454 New translations strings.xml (Bosnian) 2023-09-12 06:51:37 +02:00
Eugen Rochko
522dbf6e4a New translations strings.xml (Filipino) 2023-09-12 06:51:36 +02:00
Eugen Rochko
ae685095ba New translations strings.xml (Burmese) 2023-09-12 06:51:35 +02:00
Eugen Rochko
30d5fe2f12 New translations strings.xml (Hindi) 2023-09-12 06:51:34 +02:00
Eugen Rochko
2bf27c561c New translations strings.xml (Croatian) 2023-09-12 06:51:33 +02:00
Eugen Rochko
bbdc72323d New translations strings.xml (Thai) 2023-09-12 06:51:31 +02:00
Eugen Rochko
6e335930f3 New translations strings.xml (Bengali) 2023-09-12 06:51:31 +02:00
Eugen Rochko
9b309939da New translations strings.xml (Persian) 2023-09-12 06:51:30 +02:00
Eugen Rochko
faf2e5115d New translations strings.xml (Indonesian) 2023-09-12 06:51:28 +02:00
Eugen Rochko
dc5d9412c8 New translations strings.xml (Portuguese, Brazilian) 2023-09-12 06:51:27 +02:00
Eugen Rochko
fc0680d66f New translations strings.xml (Icelandic) 2023-09-12 06:51:26 +02:00
Eugen Rochko
56c9a5433f New translations strings.xml (Galician) 2023-09-12 06:51:25 +02:00
Eugen Rochko
60e473ee55 New translations strings.xml (Vietnamese) 2023-09-12 06:51:24 +02:00
Eugen Rochko
ae34ecd5c3 New translations strings.xml (Chinese Traditional) 2023-09-12 06:51:23 +02:00
Eugen Rochko
fd1caa8729 New translations strings.xml (Chinese Simplified) 2023-09-12 06:51:22 +02:00
Eugen Rochko
1182e5c60c New translations strings.xml (Ukrainian) 2023-09-12 06:51:21 +02:00
Eugen Rochko
d99d515dfa New translations strings.xml (Turkish) 2023-09-12 06:51:20 +02:00
Eugen Rochko
70a15e7d9c New translations strings.xml (Swedish) 2023-09-12 06:51:19 +02:00
Eugen Rochko
1691382369 New translations strings.xml (Slovenian) 2023-09-12 06:51:18 +02:00
Eugen Rochko
b7da9c6d51 New translations strings.xml (Russian) 2023-09-12 06:51:17 +02:00
Eugen Rochko
3426538dca New translations strings.xml (Portuguese) 2023-09-12 06:51:16 +02:00
Eugen Rochko
63de2b200b New translations strings.xml (Polish) 2023-09-12 06:51:15 +02:00
Eugen Rochko
ff1ee766dc New translations strings.xml (Norwegian) 2023-09-12 06:51:14 +02:00
Eugen Rochko
f033411adf New translations strings.xml (Dutch) 2023-09-12 06:51:13 +02:00
Eugen Rochko
a738eaf8c0 New translations strings.xml (Korean) 2023-09-12 06:51:12 +02:00
Eugen Rochko
5074aadd6e New translations strings.xml (Japanese) 2023-09-12 06:51:11 +02:00
Eugen Rochko
0854961470 New translations strings.xml (Italian) 2023-09-12 06:51:10 +02:00
Eugen Rochko
227b077935 New translations strings.xml (Armenian) 2023-09-12 06:51:09 +02:00
Eugen Rochko
1e4358290a New translations strings.xml (Hungarian) 2023-09-12 06:51:08 +02:00
Eugen Rochko
925169eb31 New translations strings.xml (Hebrew) 2023-09-12 06:51:07 +02:00
Eugen Rochko
e1abeb9252 New translations strings.xml (Irish) 2023-09-12 06:51:07 +02:00
Eugen Rochko
cbe0add211 New translations strings.xml (Finnish) 2023-09-12 06:51:06 +02:00
Eugen Rochko
299b524d62 New translations strings.xml (Basque) 2023-09-12 06:51:05 +02:00
Eugen Rochko
31c094e696 New translations strings.xml (Greek) 2023-09-12 06:51:04 +02:00
Eugen Rochko
a8038a2863 New translations strings.xml (German) 2023-09-12 06:51:02 +02:00
Eugen Rochko
29933bb916 New translations strings.xml (Danish) 2023-09-12 06:51:01 +02:00
Eugen Rochko
5ec0c078d8 New translations strings.xml (Czech) 2023-09-12 06:51:00 +02:00
Eugen Rochko
e6287f1ff2 New translations strings.xml (Catalan) 2023-09-12 06:50:59 +02:00
Eugen Rochko
be9caf8905 New translations strings.xml (Belarusian) 2023-09-12 06:50:58 +02:00
Eugen Rochko
f375142084 New translations strings.xml (Arabic) 2023-09-12 06:50:57 +02:00
Eugen Rochko
fd3668d520 New translations strings.xml (Spanish) 2023-09-12 06:50:56 +02:00
Eugen Rochko
d5e03e9d9e New translations strings.xml (French) 2023-09-12 06:50:55 +02:00
Eugen Rochko
d62f094919 New translations strings.xml (Romanian) 2023-09-12 06:50:54 +02:00
Grishka
6d84f28600 Hashtag following
closes #684, closes #233
2023-09-12 07:49:14 +03:00
Grishka
209e603f2c oops 2023-09-12 06:05:45 +03:00
Grishka
1b4dc01c74 Post translation
closes #267, closes #671, closes #502
2023-09-12 06:00:40 +03:00
Grishka
645af12c3f Merge branch 'l10n_master' 2023-09-12 02:32:38 +03:00
Grishka
fadc42d72b New version 2023-09-12 02:32:23 +03:00
Eugen Rochko
fc831e7d42 New translations strings.xml (Portuguese, Brazilian) 2023-09-11 22:36:20 +02:00
Eugen Rochko
2998ee9145 New translations strings.xml (Finnish) 2023-09-11 20:09:41 +02:00
Eugen Rochko
971c4e5879 New translations strings.xml (Finnish) 2023-09-11 19:00:28 +02:00
Eugen Rochko
b396ee7987 New translations strings.xml (Indonesian) 2023-09-10 15:07:27 +02:00
Eugen Rochko
0f803cd4fa New translations strings.xml (Finnish) 2023-09-09 20:30:25 +02:00
Eugen Rochko
167a14b8db New translations strings.xml (Finnish) 2023-09-09 19:29:29 +02:00
Eugen Rochko
81cbc2d10c New translations strings.xml (Ukrainian) 2023-09-09 15:40:28 +02:00
Eugen Rochko
9bd8aff99b New translations strings.xml (Finnish) 2023-09-09 12:08:15 +02:00
Eugen Rochko
a770828165 New translations strings.xml (Finnish) 2023-09-09 11:09:40 +02:00
Eugen Rochko
ab457035ff New translations strings.xml (Finnish) 2023-09-09 08:34:27 +02:00
Grishka
f886e4c1d2 Fix #658, fix #620 2023-09-09 03:39:27 +03:00
Eugen Rochko
be73c9e81c New translations strings.xml (Basque) 2023-09-07 02:28:42 +02:00
Eugen Rochko
1c2183bf1a New translations strings.xml (Slovenian) 2023-09-06 22:29:03 +02:00
Gregory K
1789d90dc3 Merge pull request #685 from LucasGGamerM/mastodon-android
fix(editing-alt-text): fix small oversight on editing existing attachments without alt text
2023-09-06 01:42:41 +03:00
LucasGGamerM
57306ff7fe fix(editing-alt-text): fix small oversight on editing existing attachments without alt text
This makes the implementation hopefully bug free
2023-09-05 19:37:12 -03:00
Eugen Rochko
f0eb6573f4 New translations strings.xml (Portuguese, Brazilian) 2023-09-04 08:10:24 +02:00
Eugen Rochko
e7f5dd3357 New translations strings.xml (Bengali) 2023-09-04 07:10:06 +02:00
Eugen Rochko
8101bb9ea1 New translations strings.xml (Portuguese, Brazilian) 2023-09-04 07:10:05 +02:00
Eugen Rochko
228fdc8ffe New translations strings.xml (Swedish) 2023-09-03 11:26:37 +02:00
Eugen Rochko
e9df125cde New translations strings.xml (Swedish) 2023-09-01 16:10:32 +02:00
Gregory K
16ef577a7a Merge pull request #678 from LucasGGamerM/mastodon-android
fix: fix alt texts not being able to be edited
2023-08-31 20:31:39 +03:00
LucasGGamerM
734b3bced6 fix: fix alt texts not being able to be edited
fixes #70 cc: @sk22
2023-08-31 14:18:32 -03:00
Gregory K
5f6f3c94c9 Merge pull request #677 from tinsukE/gap-local-filter
When loading gap posts, apply filters before building display items.
2023-08-31 15:06:07 +03:00
Angelo Suzuki
09ba42a974 When loading gap posts, apply filters before building display items.
This will make sure that items that are filtered out don't show up on the interface.
Fixes #675
2023-08-31 14:01:58 +02:00
Eugen Rochko
d76e823489 New translations strings.xml (Italian) 2023-08-29 11:52:38 +02:00
Eugen Rochko
900b204bb0 New translations strings.xml (Portuguese, Brazilian) 2023-08-27 16:51:00 +02:00
Eugen Rochko
17d679901a New translations strings.xml (Japanese) 2023-08-27 15:42:52 +02:00
Eugen Rochko
d8036779f8 New translations strings.xml (Japanese) 2023-08-27 14:46:15 +02:00
Eugen Rochko
3f6bda28b3 New translations strings.xml (Vietnamese) 2023-08-26 17:43:48 +02:00
Eugen Rochko
c0b4f4dd79 New translations strings.xml (Vietnamese) 2023-08-26 16:06:27 +02:00
Eugen Rochko
f36aee44c6 New translations strings.xml (Scottish Gaelic) 2023-08-25 09:54:23 +02:00
Eugen Rochko
cd24526a9d New translations strings.xml (Swedish) 2023-08-24 17:48:37 +02:00
Eugen Rochko
a345ac1390 New translations strings.xml (Icelandic) 2023-08-24 17:48:36 +02:00
Eugen Rochko
3d987b8e1d New translations strings.xml (Thai) 2023-08-23 21:39:07 +02:00
Eugen Rochko
57043912e0 New translations strings.xml (Chinese Traditional) 2023-08-23 19:16:40 +02:00
Eugen Rochko
00aef5ea6b New translations full_description.txt (Arabic) 2023-08-23 13:02:31 +02:00
Eugen Rochko
369b69668c New translations strings.xml (Arabic) 2023-08-23 13:02:29 +02:00
Eugen Rochko
65245f4560 New translations strings.xml (Arabic) 2023-08-23 09:39:50 +02:00
Eugen Rochko
4d4fdc97d4 New translations strings.xml (French) 2023-08-23 09:39:49 +02:00
Eugen Rochko
c96577891c New translations strings.xml (Scottish Gaelic) 2023-08-23 07:00:18 +02:00
Eugen Rochko
f48b2fc9cb New translations strings.xml (Thai) 2023-08-23 07:00:13 +02:00
Eugen Rochko
2fca2580ed New translations strings.xml (Bengali) 2023-08-23 07:00:12 +02:00
Eugen Rochko
7adc1da361 New translations strings.xml (Persian) 2023-08-23 07:00:11 +02:00
Eugen Rochko
6dc24dde43 New translations strings.xml (Indonesian) 2023-08-23 07:00:10 +02:00
Eugen Rochko
4929e0e6ec New translations strings.xml (Portuguese, Brazilian) 2023-08-23 07:00:09 +02:00
Eugen Rochko
16a8b8ed71 New translations strings.xml (Icelandic) 2023-08-23 07:00:08 +02:00
Eugen Rochko
ad1412817e New translations strings.xml (Galician) 2023-08-23 07:00:07 +02:00
Eugen Rochko
d9e6bb3bea New translations strings.xml (Vietnamese) 2023-08-23 07:00:06 +02:00
Eugen Rochko
8970404638 New translations strings.xml (Chinese Traditional) 2023-08-23 07:00:05 +02:00
Eugen Rochko
2a2241d7f9 New translations strings.xml (Chinese Simplified) 2023-08-23 07:00:04 +02:00
Eugen Rochko
db1a47e8eb New translations strings.xml (Ukrainian) 2023-08-23 07:00:03 +02:00
Eugen Rochko
3e57061cef New translations strings.xml (Turkish) 2023-08-23 07:00:02 +02:00
Eugen Rochko
cd200f8450 New translations strings.xml (Slovenian) 2023-08-23 07:00:00 +02:00
Eugen Rochko
782013079f New translations strings.xml (Russian) 2023-08-23 06:59:59 +02:00
Eugen Rochko
e5db8acd66 New translations strings.xml (Polish) 2023-08-23 06:59:57 +02:00
Eugen Rochko
1a6a8019c8 New translations strings.xml (Norwegian) 2023-08-23 06:59:57 +02:00
Eugen Rochko
e935eef29f New translations strings.xml (Dutch) 2023-08-23 06:59:56 +02:00
Eugen Rochko
381defda51 New translations strings.xml (Japanese) 2023-08-23 06:59:54 +02:00
Eugen Rochko
02ae80c204 New translations strings.xml (Italian) 2023-08-23 06:59:53 +02:00
Eugen Rochko
82214b30e8 New translations strings.xml (Armenian) 2023-08-23 06:59:52 +02:00
Eugen Rochko
33a1f48602 New translations strings.xml (Greek) 2023-08-23 06:59:48 +02:00
Eugen Rochko
aee845e5cc New translations strings.xml (German) 2023-08-23 06:59:47 +02:00
Eugen Rochko
cd780f6006 New translations strings.xml (Danish) 2023-08-23 06:59:46 +02:00
Eugen Rochko
d4741fefa0 New translations strings.xml (Czech) 2023-08-23 06:59:46 +02:00
Eugen Rochko
7e1e8a2616 New translations strings.xml (Belarusian) 2023-08-23 06:59:44 +02:00
Eugen Rochko
d73c05cdfc New translations strings.xml (Arabic) 2023-08-23 06:59:43 +02:00
Eugen Rochko
78323023cb New translations strings.xml (Spanish) 2023-08-23 06:59:42 +02:00
Eugen Rochko
2cf084c98f New translations strings.xml (French) 2023-08-23 06:59:41 +02:00
107 changed files with 2110 additions and 151 deletions

View File

@@ -2,7 +2,7 @@
اِنضم إلَى مُجتَمع وأنشئ مِلَفَّكَ التَّعريفِيّ. ابحث عن أشخاص رائعين، تابعهم واقرأ منشوراتهم في خطٍّ زمني خالٍ من الإعلانات. عبِّر عَن نَفسِكَ باِستخدام رُموزٍ تَعبيرِيَّةٍ مُخصَّصَة، أو صُوَر، أو صُوَرٍ مُتحَرِّكَة، أو مَقاطِعٍ مَرئِّيَة أو مَقاطِعٍ صَوتِيَّةٍ فِي مَنشوراتٍ ذَاتُ خَمسِمائَة حَرف. رُدّ على سَلاسِلِ المَنشوراتِ، وأعِد تَدوينَ مَنشُوراتِ أيِّ شَخصٍ لِمُشارَكَةِ الأُمُورِ الرَّائِعَة. اِبحَث عَن حِساباتٍ جَديدَةٍ لِمُتابَعَتِها، وَعَن وُسُومٍ شَائِعَةٍ لِتَوسيعِ شَبَكَتِك.
ماستودون مبني بتركيز على الأمان والخصوصيَّة. حدِّد ما إذا أردتَ مُشارَكَةَ مَنشُوراتِكَ مَعَ مُتابِعيك، أو الأشخاصِ الَّذينَ أشَرتَ إليهِم فَقَط أو العالَمَ بأسرِه. تتيح لك تحذيرات المحتوى إخفاء المنشورات التي تحتوي على مواد حساسة أو محفِّزَة حتى تكون مستعد للتفاعل مع محتواها. لكل مجتمع إرشاداته الخاصة ومشرفيه الخاصين للحفاظ على أمان أعضائه، كما تُساعد أدوات الحظر والإبلاغ القوية في منع إساءة الاستخدام.
ماستدون مبني بتركيزٍ على الأمان والخصوصيَّة. حدِّد ما إذا أردتَ مُشارَكَةَ مَنشُوراتِكَ مَعَ مُتابِعيك، أو الأشخاصِ الَّذينَ أشَرتَ إليهِم فَقَط أو العالَمَ بأسرِه. تتيح لك تحذيرات المحتوى إخفاء المنشورات التي تحتوي على مواد حساسة أو محفِّزَة حتى تكون مستعد للتفاعل مع محتواها. لكل مجتمع إرشاداته الخاصة ومشرفيه الخاصين للحفاظ على أمان أعضائه، كما تُساعد أدوات الحظر والإبلاغ القوية في منع إساءة الاستخدام.
مَزيدٌ مِنَ المَزايَا:

View File

@@ -1,6 +1,6 @@
Mastodon on internetin suurin hajautettu sosiaalinen verkosto. Yhden verkkopalvelun sijaan, se on miljoonien itsenäisissä yhteisöissä olevien käyttäjien verkosto, jotka voivat olla vuorovaikutuksessa toistensa kanssa saumattomasti. Riippumatta siitä, mistä olet kiinnostunut, voit tavata intohimoisia ihmisiä, jotka julkaisevat aiheesta Mastodonissa!
Mastodon on internetin suurin hajautettu sosiaalinen verkosto. Yhden verkkopalvelun sijaan, se on miljoonien itsenäisissä yhteisöissä olevien käyttäjien verkosto, jotka voivat olla vuorovaikutuksessa toistensa kanssa saumattomasti. Riippumatta siitä, mistä olet kiinnostunut, voit tavata samanmielisiä ihmisiä, jotka julkaisevat aiheesta Mastodonissa!
Liity yhteisöön ja luo itsellesi tili. Find and follow fascinating folks and read their posts in an ad-free, chronological timeline. Ilmaise itseäsi mukautetuilla emojeilla, kuvilla, videoilla ja audiolla 500 merkin pituisissa julkaisuissa. Vastaa viestiketjuihin ja edelleen jaa julkaisuja keneltä tahansa, jakaaksesi hienoja juttuja. Löydä uusia tilejä seurattavaksi ja trendaavia hashtageja laajentaaksesi verkostoasi.
Liity yhteisöön ja luo itsellesi tili. Löydä ja seuraa kiehtovia ihmisiä ja lue heidän julkaisunsa ilman mainoksia, kronologisella aikajanalla. Ilmaise itseäsi mukautetuilla emojeilla, kuvilla, videoilla ja audiolla 500 merkin pituisissa julkaisuissa. Vastaa viestiketjuihin ja edelleen jaa julkaisuja keneltä tahansa, jakaaksesi hienoja juttuja. Löydä uusia tilejä seurattavaksi ja suosittuja aihetunnisteita laajentaaksesi verkostoasi.
Mastodon on rakennettu keskittyen yksityisyyteen ja turvallisuuteen. Päätä, jaetaanko julkaisusi seuraajille, vain mainitsemillesi ihmisille vai koko maailmalle. Sisältövaroitusten avulla, voit piilottaa julkaisut, jotka sisältävät arkaluontoista tai laukaisevaa materiaalia, kunnes olet valmis käsittelemään niitä. Jokaisella yhteisöllä on omat ohjeistonsa ja valvojansa, jotka pitävät jäsenensä turvassa, ja tehokkaat esto- ja ilmiantotyökalut auttavat torjumaan väärinkäytöksiä.
@@ -8,8 +8,8 @@ Lisää ominaisuuksia:
• Tumma tila: Lue julkaisut vaaleassa, tummassa tai mustan tummassa tilassa
• Kyselyt: Kysy seuraajilta heidän mielipidettään ja laske äänet
• Tutustu: Trendaavat hashtagit ja tilit ovat vain napsautuksen päässä
• Ilmoitukset: Saat ilmoituksen uusista seuraajista, vastauksista ja edelleen jaoista
• Tutustu: Suositut aihetunnisteet ja tilit ovat vain napsautuksen päässä
• Ilmoitukset: Saat ilmoituksen uusista seuraajista, vastauksista ja tehostuksista
• Jakaminen: Julkaise suoraan Mastodoniin minkä tahansa sovelluksen jakovalikon kautta
• Suloisuus: Maskottimme on ihastuttava mastodontti ja näet sen ajoittain

View File

@@ -1,4 +1,4 @@
Mastodon เป็นเครือข่ายสังคมแบบกระจายศูนย์ที่ใหญ่ที่สุดบนอินเทอร์เน็ต ซึ่งไม่ได้เป็นเว็บไซต์เดียว แต่เป็นเครือข่ายของผู้ใช้หลายล้านคนในชุมชนอิสระที่ทุกคนสามารถโต้ตอบซึ่งกันและกันได้แบบไร้รอยต่อ ไม่ว่าคุณจะชอบอะไร คุณก็พบคนที่ชื่นชอบเหมือนกันโพสต์เกี่ยวกับสิ่งที่คุณชอบได้บน Mastodon! ซึ่งไม่ได้เป็นเว็บไซต์เดียว แต่เป็นเครือข่ายของผู้ใช้หลายล้านคนในชุมชนอิสระที่ทุกคนสามารถโต้ตอบซึ่งกันและกันได้แบบไร้รอยต่อ ไม่ว่าคุณจะชอบอะไร คุณก็พบคนที่ชื่นชอบเหมือนกันโพสต์เกี่ยวกับสิ่งที่คุณชอบได้บน Mastodon!
Mastodon เป็นเครือข่ายสังคมแบบกระจายศูนย์ที่ใหญ่ที่สุดบนอินเทอร์เน็ต ซึ่งไม่ได้เป็นเว็บไซต์เดียว แต่เป็นเครือข่ายของผู้ใช้หลายล้านคนในชุมชนอิสระที่ทุกคนสามารถโต้ตอบซึ่งกันและกันได้แบบไร้รอยต่อ ไม่ว่าคุณจะชอบอะไร คุณก็พบคนที่ชื่นชอบเหมือนกันโพสต์เกี่ยวกับสิ่งที่คุณชอบได้บน Mastodon!
เข้าร่วมชุมชนและสร้างโปรไฟล์ ค้นหาและติดตามผู้คนที่น่าสนใจและอ่านโพสต์ของเขาในเส้นเวลาที่ไม่มีโฆษณาและเรียงตามลำดับเวลา แสดงความรู้สึกของตัวคุณเองด้วยอีโมจิที่กำหนดเอง รูปภาพ GIF วิดีโอ และเสียงในโพสต์ 500 ตัวอักษร ตอบกลับและดันโพสต์จากคนอื่น ๆ เพื่อแชร์สิ่งดี ๆ และค้นหาบัญชีใหม่ ๆ ที่จะติดตามและแฮชแท็กที่เป็นที่นิยมเพื่อขยายเครือข่ายของคุณ
@@ -13,4 +13,4 @@ Mastodon สร้างขึ้นโดยเน้นความเป็
• การแชร์: โพสต์ลง Mastodon ได้โดยตรงจากแอปอื่น ๆ ที่อยู่ในเครื่อง
• ความน่ารัก: มาสคอตของเราเป็นช้างน่ารัก และคุณจะเห็นมันโผล่ออกมาเป็นระยะ ๆ
Mastodon เป็นองค์กรไม่แสวงหาผลกำไรที่จดทะเบียนแล้ว และการพัฒนาได้รับการสนับสนุนจากเงินบริจาคของคุณโดยตรง ดังนั้นจึงไม่มีโฆษณา ไม่มีการทำกำไร และไม่มีการร่วมลงทุน และเรามีแผนจะทำให้เป็นอย่างนี้ต่อไป ดังนั้นจึงไม่มีโฆษณา ไม่มีการทำกำไร และไม่มีการร่วมลงทุน และเรามีแผนจะทำให้เป็นอย่างนี้ต่อไป
Mastodon เป็นองค์กรไม่แสวงหาผลกำไรที่จดทะเบียนแล้ว และการพัฒนาได้รับการสนับสนุนจากเงินบริจาคของคุณโดยตรง ดังนั้นจึงไม่มีโฆษณา ไม่มีการทำกำไร และไม่มีการร่วมลงทุน และเรามีแผนจะทำให้เป็นอย่างนี้ต่อไป

View File

@@ -9,8 +9,8 @@ android {
applicationId "org.joinmastodon.android"
minSdk 23
targetSdk 33
versionCode 63
versionName "2.0.3"
versionCode 69
versionName "2.1.3"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
resConfigs "ar-rSA", "be-rBY", "bn-rBD", "bs-rBA", "ca-rES", "cs-rCZ", "da-rDK", "de-rDE", "el-rGR", "es-rES", "eu-rES", "fa-rIR", "fi-rFI", "fil-rPH", "fr-rFR", "ga-rIE", "gd-rGB", "gl-rES", "hi-rIN", "hr-rHR", "hu-rHU", "hy-rAM", "ig-rNG", "in-rID", "is-rIS", "it-rIT", "iw-rIL", "ja-rJP", "kab", "ko-rKR", "my-rMM", "nl-rNL", "no-rNO", "oc-rFR", "pl-rPL", "pt-rBR", "pt-rPT", "ro-rRO", "ru-rRU", "si-rLK", "sl-rSI", "sv-rSE", "th-rTH", "tr-rTR", "uk-rUA", "ur-rIN", "vi-rVN", "zh-rCN", "zh-rTW"
}
@@ -76,7 +76,7 @@ dependencies {
implementation 'me.grishka.litex:viewpager:1.0.0'
implementation 'me.grishka.litex:viewpager2:1.0.0'
implementation 'me.grishka.litex:palette:1.0.0'
implementation 'me.grishka.appkit:appkit:1.2.9'
implementation 'me.grishka.appkit:appkit:1.2.13'
implementation 'com.google.code.gson:gson:2.8.9'
implementation 'org.jsoup:jsoup:1.14.3'
implementation 'com.squareup:otto:1.3.8'

View File

@@ -136,7 +136,7 @@ public class MainActivity extends FragmentStackActivity{
}
public void openSearchQuery(String q, String accountID, int progressText, boolean fromSearch){
new GetSearchResults(q, null, true)
new GetSearchResults(q, null, true, null, 0, 0)
.setCallback(new Callback<>(){
@Override
public void onSuccess(SearchResults result){

View File

@@ -118,6 +118,8 @@ public class PushNotificationReceiver extends BroadcastReceiver{
List<NotificationChannel> channels=Arrays.stream(PushNotification.Type.values())
.map(type->{
NotificationChannel channel=new NotificationChannel(accountID+"_"+type, context.getString(type.localizedName), NotificationManager.IMPORTANCE_DEFAULT);
channel.setLightColor(context.getColor(R.color.primary_700));
channel.enableLights(true);
channel.setGroup(accountID);
return channel;
})
@@ -147,6 +149,7 @@ public class PushNotificationReceiver extends BroadcastReceiver{
.setShowWhen(true)
.setCategory(Notification.CATEGORY_SOCIAL)
.setAutoCancel(true)
.setLights(context.getColor(R.color.primary_700), 500, 1000)
.setColor(context.getColor(R.color.primary_700));
if(avatar!=null){
builder.setLargeIcon(UiUtils.getBitmapFromDrawable(avatar));

View File

@@ -6,18 +6,19 @@ import org.joinmastodon.android.model.Preferences;
import org.joinmastodon.android.model.StatusPrivacy;
public class UpdateAccountCredentialsPreferences extends MastodonAPIRequest<Account>{
public UpdateAccountCredentialsPreferences(Preferences preferences, Boolean locked, Boolean discoverable){
public UpdateAccountCredentialsPreferences(Preferences preferences, Boolean locked, Boolean discoverable, Boolean indexable){
super(HttpMethod.PATCH, "/accounts/update_credentials", Account.class);
setRequestBody(new Request(locked, discoverable, new RequestSource(preferences.postingDefaultVisibility, preferences.postingDefaultLanguage)));
setRequestBody(new Request(locked, discoverable, indexable, new RequestSource(preferences.postingDefaultVisibility, preferences.postingDefaultLanguage)));
}
private static class Request{
public Boolean locked, discoverable;
public Boolean locked, discoverable, indexable;
public RequestSource source;
public Request(Boolean locked, Boolean discoverable, RequestSource source){
public Request(Boolean locked, Boolean discoverable, Boolean indexable, RequestSource source){
this.locked=locked;
this.discoverable=discoverable;
this.indexable=indexable;
this.source=source;
}
}

View File

@@ -6,6 +6,9 @@ import org.joinmastodon.android.model.FilterContext;
import java.util.EnumSet;
import java.util.List;
import androidx.annotation.Keep;
@Keep
class FilterRequest{
public String title;
public EnumSet<FilterContext> context;

View File

@@ -4,13 +4,19 @@ import org.joinmastodon.android.api.MastodonAPIRequest;
import org.joinmastodon.android.model.SearchResults;
public class GetSearchResults extends MastodonAPIRequest<SearchResults>{
public GetSearchResults(String query, Type type, boolean resolve){
public GetSearchResults(String query, Type type, boolean resolve, String maxID, int offset, int count){
super(HttpMethod.GET, "/search", SearchResults.class);
addQueryParameter("q", query);
if(type!=null)
addQueryParameter("type", type.name().toLowerCase());
if(resolve)
addQueryParameter("resolve", "true");
if(maxID!=null)
addQueryParameter("max_id", maxID);
if(offset>0)
addQueryParameter("offset", String.valueOf(offset));
if(count>0)
addQueryParameter("limit", String.valueOf(count));
}
public GetSearchResults limit(int limit){

View File

@@ -17,6 +17,7 @@ public class CreateStatus extends MastodonAPIRequest<Status>{
public static class Request{
public String status;
public List<MediaAttribute> mediaAttributes;
public List<String> mediaIds;
public Poll poll;
public String inReplyToId;
@@ -32,5 +33,17 @@ public class CreateStatus extends MastodonAPIRequest<Status>{
public boolean multiple;
public boolean hideTotals;
}
public static class MediaAttribute{
public String id;
public String description;
public String focus;
public MediaAttribute(String id, String description, String focus){
this.id=id;
this.description=description;
this.focus=focus;
}
}
}
}

View File

@@ -0,0 +1,13 @@
package org.joinmastodon.android.api.requests.statuses;
import org.joinmastodon.android.api.MastodonAPIRequest;
import org.joinmastodon.android.model.Translation;
import java.util.Map;
public class TranslateStatus extends MastodonAPIRequest<Translation>{
public TranslateStatus(String id, String lang){
super(HttpMethod.POST, "/statuses/"+id+"/translate", Translation.class);
setRequestBody(Map.of("lang", lang));
}
}

View File

@@ -0,0 +1,10 @@
package org.joinmastodon.android.api.requests.tags;
import org.joinmastodon.android.api.MastodonAPIRequest;
import org.joinmastodon.android.model.Hashtag;
public class GetTag extends MastodonAPIRequest<Hashtag>{
public GetTag(String tag){
super(HttpMethod.GET, "/tags/"+tag, Hashtag.class);
}
}

View File

@@ -0,0 +1,11 @@
package org.joinmastodon.android.api.requests.tags;
import org.joinmastodon.android.api.MastodonAPIRequest;
import org.joinmastodon.android.model.Hashtag;
public class SetTagFollowed extends MastodonAPIRequest<Hashtag>{
public SetTagFollowed(String tag, boolean followed){
super(HttpMethod.POST, "/tags/"+tag+(followed ? "/follow" : "/unfollow"), Hashtag.class);
setRequestBody(new Object());
}
}

View File

@@ -195,7 +195,7 @@ public class AccountSession{
public void savePreferencesIfPending(){
if(preferencesNeedSaving){
new UpdateAccountCredentialsPreferences(preferences, null, null)
new UpdateAccountCredentialsPreferences(preferences, null, self.discoverable, self.source.indexable)
.setCallback(new Callback<>(){
@Override
public void onSuccess(Account result){
@@ -261,4 +261,8 @@ public class AccountSession{
return false;
});
}
public void updateAccountInfo(){
AccountSessionManager.getInstance().updateSessionLocalInfo(this);
}
}

View File

@@ -279,7 +279,7 @@ public class AccountSessionManager{
}
}
private void updateSessionLocalInfo(AccountSession session){
/*package*/ void updateSessionLocalInfo(AccountSession session){
new GetOwnAccount()
.setCallback(new Callback<>(){
@Override

View File

@@ -17,13 +17,16 @@ import org.joinmastodon.android.E;
import org.joinmastodon.android.R;
import org.joinmastodon.android.api.requests.accounts.GetAccountRelationships;
import org.joinmastodon.android.api.requests.polls.SubmitPollVote;
import org.joinmastodon.android.api.requests.statuses.TranslateStatus;
import org.joinmastodon.android.events.PollUpdatedEvent;
import org.joinmastodon.android.model.Account;
import org.joinmastodon.android.model.DisplayItemsParent;
import org.joinmastodon.android.model.Poll;
import org.joinmastodon.android.model.Relationship;
import org.joinmastodon.android.model.Status;
import org.joinmastodon.android.model.Translation;
import org.joinmastodon.android.ui.BetterItemAnimator;
import org.joinmastodon.android.ui.M3AlertDialogBuilder;
import org.joinmastodon.android.ui.displayitems.AccountStatusDisplayItem;
import org.joinmastodon.android.ui.displayitems.ExtendedFooterStatusDisplayItem;
import org.joinmastodon.android.ui.displayitems.GapStatusDisplayItem;
@@ -33,6 +36,7 @@ import org.joinmastodon.android.ui.displayitems.PollFooterStatusDisplayItem;
import org.joinmastodon.android.ui.displayitems.PollOptionStatusDisplayItem;
import org.joinmastodon.android.ui.displayitems.SpoilerStatusDisplayItem;
import org.joinmastodon.android.ui.displayitems.StatusDisplayItem;
import org.joinmastodon.android.ui.displayitems.TextStatusDisplayItem;
import org.joinmastodon.android.ui.photoviewer.PhotoViewer;
import org.joinmastodon.android.ui.photoviewer.PhotoViewerHost;
import org.joinmastodon.android.ui.utils.MediaAttachmentViewController;
@@ -43,6 +47,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
@@ -560,6 +565,61 @@ public abstract class BaseStatusListFragment<T extends DisplayItemsParent> exten
return attachmentViewsPool;
}
public void togglePostTranslation(Status status, String itemID){
switch(status.translationState){
case LOADING -> {
return;
}
case SHOWN -> {
status.translationState=Status.TranslationState.HIDDEN;
}
case HIDDEN -> {
if(status.translation!=null){
status.translationState=Status.TranslationState.SHOWN;
}else{
status.translationState=Status.TranslationState.LOADING;
new TranslateStatus(status.getContentStatus().id, Locale.getDefault().getLanguage())
.setCallback(new Callback<>(){
@Override
public void onSuccess(Translation result){
if(getActivity()==null)
return;
status.translation=result;
status.translationState=Status.TranslationState.SHOWN;
TextStatusDisplayItem.Holder text=findHolderOfType(itemID, TextStatusDisplayItem.Holder.class);
if(text!=null){
text.updateTranslation(true);
imgLoader.bindViewHolder((ImageLoaderRecyclerAdapter) list.getAdapter(), text, text.getAbsoluteAdapterPosition());
}
}
@Override
public void onError(ErrorResponse error){
if(getActivity()==null)
return;
status.translationState=Status.TranslationState.HIDDEN;
TextStatusDisplayItem.Holder text=findHolderOfType(itemID, TextStatusDisplayItem.Holder.class);
if(text!=null){
text.updateTranslation(true);
}
new M3AlertDialogBuilder(getActivity())
.setTitle(R.string.error)
.setMessage(R.string.translation_failed)
.setPositiveButton(R.string.ok, null)
.show();
}
})
.exec(accountID);
}
}
}
TextStatusDisplayItem.Holder text=findHolderOfType(itemID, TextStatusDisplayItem.Holder.class);
if(text!=null){
text.updateTranslation(true);
imgLoader.bindViewHolder((ImageLoaderRecyclerAdapter) list.getAdapter(), text, text.getAbsoluteAdapterPosition());
}
}
public void rebuildAllDisplayItems(){
displayItems.clear();
for(T item:data){

View File

@@ -691,6 +691,9 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
req.visibility=statusVisibility;
if(!mediaViewController.isEmpty()){
req.mediaIds=mediaViewController.getAttachmentIDs();
if(editingStatus != null){
req.mediaAttributes=mediaViewController.getAttachmentAttributes();
}
}
if(replyTo!=null){
req.inReplyToId=replyTo.id;
@@ -836,7 +839,8 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
boolean usePhotoPicker=UiUtils.isPhotoPickerAvailable();
if(usePhotoPicker){
intent=new Intent(MediaStore.ACTION_PICK_IMAGES);
intent.putExtra(MediaStore.EXTRA_PICK_IMAGES_MAX, mediaViewController.getMaxAttachments()-mediaViewController.getMediaAttachmentsCount());
if(mediaViewController.getMaxAttachments()-mediaViewController.getMediaAttachmentsCount()>1)
intent.putExtra(MediaStore.EXTRA_PICK_IMAGES_MAX, mediaViewController.getMaxAttachments()-mediaViewController.getMediaAttachmentsCount());
}else{
intent=new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);

View File

@@ -15,6 +15,7 @@ import org.parceler.Parcels;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
import androidx.recyclerview.widget.RecyclerView;
@@ -44,7 +45,7 @@ public class FeaturedHashtagsListFragment extends BaseStatusListFragment<Hashtag
@Override
public void onItemClick(String id){
UiUtils.openHashtagTimeline(getActivity(), accountID, id);
UiUtils.openHashtagTimeline(getActivity(), accountID, Objects.requireNonNull(findItemOfType(id, HashtagStatusDisplayItem.class)).tag);
}
@Override

View File

@@ -1,24 +1,52 @@
package org.joinmastodon.android.fragments;
import android.app.Activity;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.text.SpannableStringBuilder;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.ProgressBar;
import android.widget.TextView;
import org.joinmastodon.android.R;
import org.joinmastodon.android.api.MastodonErrorResponse;
import org.joinmastodon.android.api.requests.tags.GetTag;
import org.joinmastodon.android.api.requests.tags.SetTagFollowed;
import org.joinmastodon.android.api.requests.timelines.GetHashtagTimeline;
import org.joinmastodon.android.model.Hashtag;
import org.joinmastodon.android.model.Status;
import org.joinmastodon.android.ui.text.SpacerSpan;
import org.joinmastodon.android.ui.views.ProgressBarButton;
import org.parceler.Parcels;
import java.util.List;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import me.grishka.appkit.Nav;
import me.grishka.appkit.api.Callback;
import me.grishka.appkit.api.ErrorResponse;
import me.grishka.appkit.api.SimpleCallback;
import me.grishka.appkit.utils.CubicBezierInterpolator;
import me.grishka.appkit.utils.MergeRecyclerAdapter;
import me.grishka.appkit.utils.SingleViewRecyclerAdapter;
import me.grishka.appkit.utils.V;
public class HashtagTimelineFragment extends StatusListFragment{
private String hashtag;
private Hashtag hashtag;
private String hashtagName;
private ImageButton fab;
private TextView headerTitle, headerSubtitle;
private ProgressBarButton followButton;
private ProgressBar followProgress;
private MenuItem followMenuItem;
private boolean followRequestRunning;
private boolean toolbarContentVisible;
public HashtagTimelineFragment(){
setListLayoutId(R.layout.recycler_fragment_with_fab);
@@ -27,13 +55,19 @@ public class HashtagTimelineFragment extends StatusListFragment{
@Override
public void onAttach(Activity activity){
super.onAttach(activity);
hashtag=getArguments().getString("hashtag");
setTitle('#'+hashtag);
if(getArguments().containsKey("hashtag")){
hashtag=Parcels.unwrap(getArguments().getParcelable("hashtag"));
hashtagName=hashtag.name;
}else{
hashtagName=getArguments().getString("hashtagName");
}
setTitle('#'+hashtagName);
setHasOptionsMenu(true);
}
@Override
protected void doLoadData(int offset, int count){
currentRequest=new GetHashtagTimeline(hashtag, offset==0 ? null : getMaxID(), null, count)
currentRequest=new GetHashtagTimeline(hashtagName, offset==0 ? null : getMaxID(), null, count)
.setCallback(new SimpleCallback<>(this){
@Override
public void onSuccess(List<Status> result){
@@ -50,17 +84,39 @@ public class HashtagTimelineFragment extends StatusListFragment{
loadData();
}
@Override
public void loadData(){
reloadTag();
super.loadData();
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState){
super.onViewCreated(view, savedInstanceState);
fab=view.findViewById(R.id.fab);
fab.setOnClickListener(this::onFabClick);
list.addOnScrollListener(new RecyclerView.OnScrollListener(){
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy){
View topChild=recyclerView.getChildAt(0);
int firstChildPos=recyclerView.getChildAdapterPosition(topChild);
float newAlpha=firstChildPos>0 ? 1f : Math.min(1f, -topChild.getTop()/(float)headerTitle.getHeight());
toolbarTitleView.setAlpha(newAlpha);
boolean newToolbarVisibility=newAlpha>0.5f;
if(newToolbarVisibility!=toolbarContentVisible){
toolbarContentVisible=newToolbarVisibility;
if(followMenuItem!=null)
followMenuItem.setVisible(toolbarContentVisible);
}
}
});
}
private void onFabClick(View v){
Bundle args=new Bundle();
args.putString("account", accountID);
args.putString("prefilledText", '#'+hashtag+' ');
args.putString("prefilledText", '#'+hashtagName+' ');
Nav.go(getActivity(), ComposeFragment.class, args);
}
@@ -68,4 +124,150 @@ public class HashtagTimelineFragment extends StatusListFragment{
protected void onSetFabBottomInset(int inset){
((ViewGroup.MarginLayoutParams) fab.getLayoutParams()).bottomMargin=V.dp(16)+inset;
}
@Override
protected RecyclerView.Adapter getAdapter(){
View header=getActivity().getLayoutInflater().inflate(R.layout.header_hashtag_timeline, list, false);
headerTitle=header.findViewById(R.id.title);
headerSubtitle=header.findViewById(R.id.subtitle);
followButton=header.findViewById(R.id.profile_action_btn);
followProgress=header.findViewById(R.id.action_progress);
headerTitle.setText("#"+hashtagName);
followButton.setVisibility(View.GONE);
followButton.setOnClickListener(v->{
if(hashtag==null)
return;
setFollowed(!hashtag.following);
});
updateHeader();
MergeRecyclerAdapter mergeAdapter=new MergeRecyclerAdapter();
mergeAdapter.addAdapter(new SingleViewRecyclerAdapter(header));
mergeAdapter.addAdapter(super.getAdapter());
return mergeAdapter;
}
@Override
protected int getMainAdapterOffset(){
return 1;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater){
followMenuItem=menu.add(getString(hashtag!=null && hashtag.following ? R.string.unfollow_user : R.string.follow_user, "#"+hashtagName));
followMenuItem.setVisible(toolbarContentVisible);
}
@Override
public boolean onOptionsItemSelected(MenuItem item){
if(hashtag!=null){
setFollowed(!hashtag.following);
}
return true;
}
@Override
protected void onUpdateToolbar(){
super.onUpdateToolbar();
toolbarTitleView.setAlpha(toolbarContentVisible ? 1f : 0f);
if(followMenuItem!=null)
followMenuItem.setVisible(toolbarContentVisible);
}
private void updateHeader(){
if(hashtag==null)
return;
if(hashtag.history!=null && !hashtag.history.isEmpty()){
int weekPosts=hashtag.history.stream().mapToInt(h->h.uses).sum();
int todayPosts=hashtag.history.get(0).uses;
int numAccounts=hashtag.history.stream().mapToInt(h->h.accounts).sum();
int hSpace=V.dp(8);
SpannableStringBuilder ssb=new SpannableStringBuilder();
ssb.append(getResources().getQuantityString(R.plurals.x_posts, weekPosts, weekPosts));
ssb.append(" ", new SpacerSpan(hSpace, 0), 0);
ssb.append('·');
ssb.append(" ", new SpacerSpan(hSpace, 0), 0);
ssb.append(getResources().getQuantityString(R.plurals.x_participants, numAccounts, numAccounts));
ssb.append(" ", new SpacerSpan(hSpace, 0), 0);
ssb.append('·');
ssb.append(" ", new SpacerSpan(hSpace, 0), 0);
ssb.append(getResources().getQuantityString(R.plurals.x_posts_today, todayPosts, todayPosts));
headerSubtitle.setText(ssb);
}
int styleRes;
followButton.setVisibility(View.VISIBLE);
if(hashtag.following){
followButton.setText(R.string.button_following);
styleRes=R.style.Widget_Mastodon_M3_Button_Tonal;
}else{
followButton.setText(R.string.button_follow);
styleRes=R.style.Widget_Mastodon_M3_Button_Filled;
}
TypedArray ta=followButton.getContext().obtainStyledAttributes(styleRes, new int[]{android.R.attr.background});
followButton.setBackground(ta.getDrawable(0));
ta.recycle();
ta=followButton.getContext().obtainStyledAttributes(styleRes, new int[]{android.R.attr.textColor});
followButton.setTextColor(ta.getColorStateList(0));
followProgress.setIndeterminateTintList(ta.getColorStateList(0));
ta.recycle();
followButton.setTextVisible(true);
followProgress.setVisibility(View.GONE);
if(followMenuItem!=null){
followMenuItem.setTitle(getString(hashtag.following ? R.string.unfollow_user : R.string.follow_user, "#"+hashtagName));
}
}
private void reloadTag(){
new GetTag(hashtagName)
.setCallback(new Callback<>(){
@Override
public void onSuccess(Hashtag result){
hashtag=result;
updateHeader();
}
@Override
public void onError(ErrorResponse error){
}
})
.exec(accountID);
}
private void setFollowed(boolean followed){
if(followRequestRunning)
return;
followButton.setTextVisible(false);
followProgress.setVisibility(View.VISIBLE);
followRequestRunning=true;
new SetTagFollowed(hashtagName, followed)
.setCallback(new Callback<>(){
@Override
public void onSuccess(Hashtag result){
if(getActivity()==null)
return;
hashtag=result;
updateHeader();
followRequestRunning=false;
}
@Override
public void onError(ErrorResponse error){
if(getActivity()==null)
return;
if(error instanceof MastodonErrorResponse er && "Duplicate record".equals(er.error)){
hashtag.following=true;
}else{
error.showToast(getActivity());
}
updateHeader();
followRequestRunning=false;
}
})
.exec(accountID);
}
}

View File

@@ -150,6 +150,7 @@ public class HomeFragment extends AppKitFragment implements OnBackPressedListene
});
}
}
tabBar.selectTab(currentTab);
return content;
}

View File

@@ -270,6 +270,7 @@ public class HomeTimelineFragment extends StatusListFragment{
}else{
result=result.subList(0, endIndex);
}
AccountSessionManager.get(accountID).filterStatuses(result, FilterContext.HOME);
List<StatusDisplayItem> targetList=displayItems.subList(gapPos, gapPos+1);
targetList.clear();
List<Status> insertedPosts=data.subList(gapPostIndex+1, gapPostIndex+1);
@@ -279,7 +280,6 @@ public class HomeTimelineFragment extends StatusListFragment{
targetList.addAll(buildDisplayItems(s));
insertedPosts.add(s);
}
AccountSessionManager.get(accountID).filterStatuses(insertedPosts, FilterContext.HOME);
if(targetList.isEmpty()){
// oops. We didn't add new posts, but at least we know there are none.
adapter.notifyItemRemoved(getMainAdapterOffset()+gapPos);

View File

@@ -93,7 +93,7 @@ public class ProfileFeaturedFragment extends BaseStatusListFragment<SearchResult
args.putParcelable("profileAccount", Parcels.wrap(res.account));
Nav.go(getActivity(), ProfileFragment.class, args);
}
case HASHTAG -> UiUtils.openHashtagTimeline(getActivity(), accountID, res.hashtag.name);
case HASHTAG -> UiUtils.openHashtagTimeline(getActivity(), accountID, res.hashtag);
case STATUS -> {
Status status=res.status.getContentStatus();
Bundle args=new Bundle();

View File

@@ -245,15 +245,23 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
tabbar.setTabTextColors(UiUtils.getThemeColor(getActivity(), R.attr.colorM3OnSurfaceVariant), UiUtils.getThemeColor(getActivity(), R.attr.colorM3Primary));
tabbar.setTabTextSize(V.dp(14));
tabLayoutMediator=new TabLayoutMediator(tabbar, pager, new TabLayoutMediator.TabConfigurationStrategy(){
tabLayoutMediator=new TabLayoutMediator(tabbar, pager, (tab, position)->tab.setText(switch(position){
case 0 -> R.string.profile_featured;
case 1 -> R.string.profile_timeline;
case 2 -> R.string.profile_about;
default -> throw new IllegalStateException();
}));
tabbar.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener(){
@Override
public void onConfigureTab(@NonNull TabLayout.Tab tab, int position){
tab.setText(switch(position){
case 0 -> R.string.profile_featured;
case 1 -> R.string.profile_timeline;
case 2 -> R.string.profile_about;
default -> throw new IllegalStateException();
});
public void onTabSelected(TabLayout.Tab tab){}
@Override
public void onTabUnselected(TabLayout.Tab tab){}
@Override
public void onTabReselected(TabLayout.Tab tab){
if(getFragmentForPage(tab.getPosition()) instanceof ScrollableToTop stt)
stt.scrollToTop();
}
});
@@ -1036,9 +1044,7 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
@NonNull
@Override
public SimpleViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType){
FrameLayout view=tabViews[viewType];
((ViewGroup)view.getParent()).removeView(view);
view.setVisibility(View.VISIBLE);
FrameLayout view=new FrameLayout(parent.getContext());
view.setLayoutParams(new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
return new SimpleViewHolder(view);
}
@@ -1046,8 +1052,13 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
@Override
public void onBindViewHolder(@NonNull SimpleViewHolder holder, int position){
Fragment fragment=getFragmentForPage(position);
FrameLayout fragmentView=tabViews[position];
fragmentView.setVisibility(View.VISIBLE);
if(fragmentView.getParent() instanceof ViewGroup parent)
parent.removeView(fragmentView);
((FrameLayout)holder.itemView).addView(fragmentView);
if(!fragment.isAdded()){
getChildFragmentManager().beginTransaction().add(holder.itemView.getId(), fragment).commit();
getChildFragmentManager().beginTransaction().add(fragmentView.getId(), fragment).commit();
holder.itemView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener(){
@Override
public boolean onPreDraw(){

View File

@@ -17,6 +17,7 @@ import org.joinmastodon.android.model.Status;
import org.joinmastodon.android.model.StatusContext;
import org.joinmastodon.android.ui.displayitems.ExtendedFooterStatusDisplayItem;
import org.joinmastodon.android.ui.displayitems.FooterStatusDisplayItem;
import org.joinmastodon.android.ui.displayitems.SpoilerStatusDisplayItem;
import org.joinmastodon.android.ui.displayitems.StatusDisplayItem;
import org.joinmastodon.android.ui.displayitems.TextStatusDisplayItem;
import org.joinmastodon.android.ui.text.HtmlParser;
@@ -61,6 +62,12 @@ public class ThreadFragment extends StatusListFragment{
text.textSelectable=true;
else if(item instanceof FooterStatusDisplayItem footer)
footer.hideCounts=true;
else if(item instanceof SpoilerStatusDisplayItem spoiler){
for(StatusDisplayItem subItem:spoiler.contentItems){
if(subItem instanceof TextStatusDisplayItem text)
text.textSelectable=true;
}
}
}
items.add(new ExtendedFooterStatusDisplayItem(s.id, this, s.getContentStatus()));
}

View File

@@ -47,7 +47,7 @@ public class ComposeAccountSearchFragment extends BaseAccountListFragment{
@Override
protected void doLoadData(int offset, int count){
refreshing=true;
currentRequest=new GetSearchResults(currentQuery, GetSearchResults.Type.ACCOUNTS, false)
currentRequest=new GetSearchResults(currentQuery, GetSearchResults.Type.ACCOUNTS, false, null, 0, 0)
.setCallback(new SimpleCallback<>(this){
@Override
public void onSuccess(SearchResults result){

View File

@@ -3,7 +3,6 @@ package org.joinmastodon.android.fragments.discover;
import android.app.Activity;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import org.joinmastodon.android.R;
@@ -20,7 +19,6 @@ import org.joinmastodon.android.model.Status;
import org.joinmastodon.android.ui.displayitems.AccountStatusDisplayItem;
import org.joinmastodon.android.ui.displayitems.HashtagStatusDisplayItem;
import org.joinmastodon.android.ui.displayitems.StatusDisplayItem;
import org.joinmastodon.android.ui.tabs.TabLayout;
import org.joinmastodon.android.ui.utils.UiUtils;
import org.parceler.Parcels;
@@ -28,13 +26,12 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.EnumSet;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
import me.grishka.appkit.Nav;
import me.grishka.appkit.api.Callback;
import me.grishka.appkit.api.ErrorResponse;
import me.grishka.appkit.utils.V;
public class SearchFragment extends BaseStatusListFragment<SearchResult>{
private String currentQuery;
@@ -94,7 +91,7 @@ public class SearchFragment extends BaseStatusListFragment<SearchResult>{
args.putParcelable("profileAccount", Parcels.wrap(res.account));
Nav.go(getActivity(), ProfileFragment.class, args);
}
case HASHTAG -> UiUtils.openHashtagTimeline(getActivity(), accountID, res.hashtag.name);
case HASHTAG -> UiUtils.openHashtagTimeline(getActivity(), accountID, res.hashtag);
case STATUS -> {
Status status=res.status.getContentStatus();
Bundle args=new Bundle();
@@ -110,7 +107,7 @@ public class SearchFragment extends BaseStatusListFragment<SearchResult>{
}
@Override
protected void doLoadData(int offset, int count){
protected void doLoadData(int _offset, int count){
GetSearchResults.Type type;
if(currentFilter.size()==1){
type=switch(currentFilter.iterator().next()){
@@ -125,7 +122,21 @@ public class SearchFragment extends BaseStatusListFragment<SearchResult>{
dataLoaded();
return;
}
currentRequest=new GetSearchResults(currentQuery, type, true)
String maxID=null;
// TODO server-side bug
/*int offset=0;
if(_offset>0){
if(type==GetSearchResults.Type.STATUSES){
if(!preloadedData.isEmpty())
maxID=preloadedData.get(preloadedData.size()-1).status.id;
else if(!data.isEmpty())
maxID=data.get(data.size()-1).status.id;
}else{
offset=_offset;
}
}*/
int offset=_offset;
currentRequest=new GetSearchResults(currentQuery, type, type==null, maxID, offset, type==null ? 0 : count)
.setCallback(new Callback<>(){
@Override
public void onSuccess(SearchResults result){
@@ -139,12 +150,15 @@ public class SearchFragment extends BaseStatusListFragment<SearchResult>{
results.add(new SearchResult(tag));
}
if(result.statuses!=null){
for(Status status:result.statuses)
results.add(new SearchResult(status));
Set<String> alreadyLoadedStatuses=data.stream().filter(r->r.type==SearchResult.Type.STATUS).map(r->r.status.id).collect(Collectors.toSet());
for(Status status:result.statuses){
if(!alreadyLoadedStatuses.contains(status.id))
results.add(new SearchResult(status));
}
}
prevDisplayItems=new ArrayList<>(displayItems);
unfilteredResults=results;
onDataLoaded(filterSearchResults(results), false);
onDataLoaded(filterSearchResults(results), type!=null && !results.isEmpty());
}
@Override

View File

@@ -43,9 +43,7 @@ import org.joinmastodon.android.ui.viewholders.AccountViewHolder;
import org.joinmastodon.android.ui.viewholders.SimpleListItemViewHolder;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.function.Function;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -121,7 +119,7 @@ public class SearchQueryFragment extends MastodonRecyclerFragment<SearchResultVi
recentsHeader.setVisible(!data.isEmpty());
});
}else{
currentRequest=new GetSearchResults(currentQuery, null, false)
currentRequest=new GetSearchResults(currentQuery, null, false, null, 0, 0)
.limit(2)
.setCallback(new SimpleCallback<>(this){
@Override
@@ -377,7 +375,7 @@ public class SearchQueryFragment extends MastodonRecyclerFragment<SearchResultVi
}
private void openHashtag(SearchResult res){
UiUtils.openHashtagTimeline(getActivity(), accountID, res.hashtag.name);
UiUtils.openHashtagTimeline(getActivity(), accountID, res.hashtag);
AccountSessionManager.getInstance().getAccount(accountID).getCacheController().putRecentSearch(res);
}
@@ -386,6 +384,8 @@ public class SearchQueryFragment extends MastodonRecyclerFragment<SearchResultVi
}
private void onSearchViewEnter(){
if(TextUtils.isEmpty(currentQuery) || currentQuery.trim().isEmpty())
return;
deliverResult(currentQuery, null);
}

View File

@@ -105,7 +105,7 @@ public class TrendingHashtagsFragment extends BaseRecyclerFragment<Hashtag> impl
@Override
public void onClick(){
UiUtils.openHashtagTimeline(getActivity(), accountID, item.name);
UiUtils.openHashtagTimeline(getActivity(), accountID, item);
}
}
}

View File

@@ -271,7 +271,7 @@ public class SignupFragment extends ToolbarFragment{
@Override
public void tail(Node node, int depth){
if(node instanceof Element){
ssb.setSpan(new LinkSpan("", SignupFragment.this::onGoBackLinkClick, LinkSpan.Type.CUSTOM, null), spanStart, ssb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
ssb.setSpan(new LinkSpan("", SignupFragment.this::onGoBackLinkClick, LinkSpan.Type.CUSTOM, null, null), spanStart, ssb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
ssb.setSpan(new TypefaceSpan("sans-serif-medium"), spanStart, ssb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}

View File

@@ -52,6 +52,7 @@ public class SettingsMainFragment extends BaseSettingsFragment<Void>{
onDataLoaded(List.of(
new ListItem<>(R.string.settings_behavior, 0, R.drawable.ic_settings_24px, this::onBehaviorClick),
new ListItem<>(R.string.settings_display, 0, R.drawable.ic_style_24px, this::onDisplayClick),
new ListItem<>(R.string.settings_privacy, 0, R.drawable.ic_privacy_tip_24px, this::onPrivacyClick),
new ListItem<>(R.string.settings_filters, 0, R.drawable.ic_filter_alt_24px, this::onFiltersClick),
new ListItem<>(R.string.settings_notifications, 0, R.drawable.ic_notifications_24px, this::onNotificationsClick),
new ListItem<>(AccountSessionManager.get(accountID).domain, getString(R.string.settings_server_explanation), R.drawable.ic_dns_24px, this::onServerClick),
@@ -63,7 +64,9 @@ public class SettingsMainFragment extends BaseSettingsFragment<Void>{
data.add(0, new ListItem<>("Debug settings", null, R.drawable.ic_settings_24px, ()->Nav.go(getActivity(), SettingsDebugFragment.class, makeFragmentArgs()), null, 0, true));
}
AccountSessionManager.get(accountID).reloadPreferences(null);
AccountSession session=AccountSessionManager.get(accountID);
session.reloadPreferences(null);
session.updateAccountInfo();
E.register(this);
}
@@ -127,6 +130,10 @@ public class SettingsMainFragment extends BaseSettingsFragment<Void>{
Nav.go(getActivity(), SettingsDisplayFragment.class, makeFragmentArgs());
}
private void onPrivacyClick(){
Nav.go(getActivity(), SettingsPrivacyFragment.class, makeFragmentArgs());
}
private void onFiltersClick(){
Nav.go(getActivity(), SettingsFiltersFragment.class, makeFragmentArgs());
}

View File

@@ -0,0 +1,41 @@
package org.joinmastodon.android.fragments.settings;
import android.os.Bundle;
import org.joinmastodon.android.R;
import org.joinmastodon.android.api.session.AccountSessionManager;
import org.joinmastodon.android.model.Account;
import org.joinmastodon.android.model.viewmodel.CheckableListItem;
import java.util.List;
public class SettingsPrivacyFragment extends BaseSettingsFragment<Void>{
private CheckableListItem<Void> discoverableItem, indexableItem;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setTitle(R.string.settings_privacy);
Account self=AccountSessionManager.get(accountID).self;
onDataLoaded(List.of(
discoverableItem=new CheckableListItem<>(R.string.settings_discoverable, 0, CheckableListItem.Style.SWITCH, self.discoverable, R.drawable.ic_thumbs_up_down_24px, ()->toggleCheckableItem(discoverableItem)),
indexableItem=new CheckableListItem<>(R.string.settings_indexable, 0, CheckableListItem.Style.SWITCH, self.source.indexable!=null ? self.source.indexable : true, R.drawable.ic_search_24px, ()->toggleCheckableItem(indexableItem))
));
if(self.source.indexable==null)
indexableItem.isEnabled=false;
}
@Override
protected void doLoadData(int offset, int count){}
@Override
public void onPause(){
super.onPause();
Account self=AccountSessionManager.get(accountID).self;
if(self.discoverable!=discoverableItem.checked || (self.source.indexable!=null && self.source.indexable!=indexableItem.checked)){
self.discoverable=discoverableItem.checked;
self.source.indexable=indexableItem.checked;
AccountSessionManager.get(accountID).savePreferencesLater();
}
}
}

View File

@@ -132,6 +132,7 @@ public class Account extends BaseModel{
* When a timed mute will expire, if applicable.
*/
public Instant muteExpiresAt;
public boolean noindex;
@Override
@@ -191,6 +192,7 @@ public class Account extends BaseModel{
", source="+source+
", suspended="+suspended+
", muteExpiresAt="+muteExpiresAt+
", noindex="+noindex+
'}';
}
}

View File

@@ -13,6 +13,7 @@ public class Hashtag extends BaseModel implements DisplayItemsParent{
public String url;
public List<History> history;
public int statusesCount;
public boolean following;
@Override
public String toString(){
@@ -21,6 +22,7 @@ public class Hashtag extends BaseModel implements DisplayItemsParent{
", url='"+url+'\''+
", history="+history+
", statusesCount="+statusesCount+
", following="+following+
'}';
}
@@ -28,4 +30,19 @@ public class Hashtag extends BaseModel implements DisplayItemsParent{
public String getID(){
return name;
}
@Override
public boolean equals(Object o){
if(this==o) return true;
if(o==null || getClass()!=o.getClass()) return false;
Hashtag hashtag=(Hashtag) o;
return name.equals(hashtag.name);
}
@Override
public int hashCode(){
return name.hashCode();
}
}

View File

@@ -20,4 +20,22 @@ public class Mention extends BaseModel{
", url='"+url+'\''+
'}';
}
@Override
public boolean equals(Object o){
if(this==o) return true;
if(o==null || getClass()!=o.getClass()) return false;
Mention mention=(Mention) o;
if(!id.equals(mention.id)) return false;
return url.equals(mention.url);
}
@Override
public int hashCode(){
int result=id.hashCode();
result=31*result+url.hashCode();
return result;
}
}

View File

@@ -37,6 +37,8 @@ public class Source extends BaseModel{
* The number of pending follow requests.
*/
public int followRequestCount;
public Boolean indexable;
public boolean hideCollections;
@Override
public void postprocess() throws ObjectValidationException{
@@ -54,6 +56,8 @@ public class Source extends BaseModel{
", sensitive="+sensitive+
", language='"+language+'\''+
", followRequestCount="+followRequestCount+
", indexable="+indexable+
", hideCollections="+hideCollections+
'}';
}
}

View File

@@ -1,5 +1,7 @@
package org.joinmastodon.android.model;
import android.text.TextUtils;
import org.joinmastodon.android.api.ObjectValidationException;
import org.joinmastodon.android.api.RequiredField;
import org.joinmastodon.android.events.StatusCountersUpdatedEvent;
@@ -8,6 +10,8 @@ import org.parceler.Parcel;
import java.time.Instant;
import java.util.List;
import java.util.Locale;
import java.util.Objects;
import androidx.annotation.NonNull;
@@ -61,6 +65,8 @@ public class Status extends BaseModel implements DisplayItemsParent{
public transient boolean spoilerRevealed;
public transient boolean hasGapAfter;
private transient String strippedText;
public transient TranslationState translationState=TranslationState.HIDDEN;
public transient Translation translation;
public Status(){}
@@ -161,6 +167,18 @@ public class Status extends BaseModel implements DisplayItemsParent{
public Status clone(){
Status copy=(Status) super.clone();
copy.spoilerRevealed=false;
copy.translationState=TranslationState.HIDDEN;
return copy;
}
public boolean isEligibleForTranslation(){
return !TextUtils.isEmpty(content) && !TextUtils.isEmpty(language) && !Objects.equals(Locale.getDefault().getLanguage(), language)
&& (visibility==StatusPrivacy.PUBLIC || visibility==StatusPrivacy.UNLISTED);
}
public enum TranslationState{
HIDDEN,
SHOWN,
LOADING
}
}

View File

@@ -0,0 +1,10 @@
package org.joinmastodon.android.model;
import org.joinmastodon.android.api.AllFieldsAreRequired;
@AllFieldsAreRequired
public class Translation extends BaseModel{
public String content;
public String detectedSourceLanguage;
public String provider;
}

View File

@@ -41,6 +41,7 @@ import org.parceler.Parcels;
import java.time.Instant;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
import androidx.annotation.LayoutRes;
import me.grishka.appkit.Nav;
@@ -195,6 +196,8 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setBookmarked(item.status, !item.status.bookmarked);
}else if(id==R.id.share){
UiUtils.openSystemShareSheet(activity, item.status.url);
}else if(id==R.id.translate){
item.parentFragment.togglePostTranslation(item.status, item.parentID);
}
return true;
});
@@ -285,6 +288,15 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
Account account=item.user;
Menu menu=optionsMenu.getMenu();
boolean isOwnPost=AccountSessionManager.getInstance().isSelf(item.parentFragment.getAccountID(), account);
boolean canTranslate=item.status!=null && item.status.getContentStatus().isEligibleForTranslation();
MenuItem translate=menu.findItem(R.id.translate);
translate.setVisible(canTranslate);
if(canTranslate){
if(item.status.translationState==Status.TranslationState.SHOWN)
translate.setTitle(R.string.translation_show_original);
else
translate.setTitle(item.parentFragment.getString(R.string.translate_post, Locale.forLanguageTag(item.status.getContentStatus().language).getDisplayLanguage()));
}
menu.findItem(R.id.edit).setVisible(item.status!=null && isOwnPost);
menu.findItem(R.id.delete).setVisible(item.status!=null && isOwnPost);
menu.findItem(R.id.open_in_browser).setVisible(item.status!=null);

View File

@@ -8,6 +8,7 @@ import android.view.ViewGroup;
import android.widget.TextView;
import org.joinmastodon.android.R;
import org.joinmastodon.android.api.session.AccountSessionManager;
import org.joinmastodon.android.fragments.BaseStatusListFragment;
import org.joinmastodon.android.model.Emoji;
import org.joinmastodon.android.ui.text.HtmlParser;
@@ -29,7 +30,8 @@ public class ReblogOrReplyLineStatusDisplayItem extends StatusDisplayItem{
public ReblogOrReplyLineStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, CharSequence text, List<Emoji> emojis, @DrawableRes int icon){
super(parentID, parentFragment);
SpannableStringBuilder ssb=new SpannableStringBuilder(text);
HtmlParser.parseCustomEmoji(ssb, emojis);
if(AccountSessionManager.get(parentFragment.getAccountID()).getLocalPreferences().customEmojiInNames)
HtmlParser.parseCustomEmoji(ssb, emojis);
this.text=ssb;
emojiHelper.setText(ssb);
this.icon=icon;

View File

@@ -3,15 +3,24 @@ package org.joinmastodon.android.ui.displayitems;
import android.app.Activity;
import android.graphics.drawable.Animatable;
import android.graphics.drawable.Drawable;
import android.text.SpannableStringBuilder;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewStub;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import org.joinmastodon.android.R;
import org.joinmastodon.android.fragments.BaseStatusListFragment;
import org.joinmastodon.android.model.Status;
import org.joinmastodon.android.ui.text.HtmlParser;
import org.joinmastodon.android.ui.utils.CustomEmojiHelper;
import org.joinmastodon.android.ui.utils.UiUtils;
import org.joinmastodon.android.ui.views.LinkedTextView;
import java.util.Locale;
import me.grishka.appkit.imageloader.ImageLoaderViewHolder;
import me.grishka.appkit.imageloader.MovieDrawable;
import me.grishka.appkit.imageloader.requests.ImageLoaderRequest;
@@ -20,6 +29,8 @@ import me.grishka.appkit.utils.V;
public class TextStatusDisplayItem extends StatusDisplayItem{
private CharSequence text;
private CustomEmojiHelper emojiHelper=new CustomEmojiHelper();
private CharSequence translatedText;
private CustomEmojiHelper translationEmojiHelper=new CustomEmojiHelper();
public boolean textSelectable;
public boolean reduceTopPadding;
public final Status status;
@@ -38,30 +49,54 @@ public class TextStatusDisplayItem extends StatusDisplayItem{
@Override
public int getImageCount(){
return emojiHelper.getImageCount();
return getCurrentEmojiHelper().getImageCount();
}
@Override
public ImageLoaderRequest getImageRequest(int index){
return emojiHelper.getImageRequest(index);
return getCurrentEmojiHelper().getImageRequest(index);
}
public void setTranslatedText(String text){
Status statusForContent=status.getContentStatus();
translatedText=HtmlParser.parse(text, statusForContent.emojis, statusForContent.mentions, statusForContent.tags, parentFragment.getAccountID());
translationEmojiHelper.setText(translatedText);
}
private CustomEmojiHelper getCurrentEmojiHelper(){
return status.translationState==Status.TranslationState.SHOWN ? translationEmojiHelper : emojiHelper;
}
public static class Holder extends StatusDisplayItem.Holder<TextStatusDisplayItem> implements ImageLoaderViewHolder{
private final LinkedTextView text;
private final ViewStub translationFooterStub;
private View translationFooter;
private TextView translationInfo;
private Button translationShowOriginal;
private ProgressBar translationProgress;
public Holder(Activity activity, ViewGroup parent){
super(activity, R.layout.display_item_text, parent);
text=findViewById(R.id.text);
translationFooterStub=findViewById(R.id.translation_info);
}
@Override
public void onBind(TextStatusDisplayItem item){
text.setText(item.text);
if(item.status.translationState==Status.TranslationState.SHOWN){
if(item.translatedText==null){
item.setTranslatedText(item.status.translation.content);
}
text.setText(item.translatedText);
}else{
text.setText(item.text);
}
text.setTextIsSelectable(item.textSelectable);
text.setInvalidateOnEveryFrame(false);
itemView.setClickable(false);
text.setPadding(text.getPaddingLeft(), item.reduceTopPadding ? V.dp(8) : V.dp(16), text.getPaddingRight(), text.getPaddingBottom());
text.setTextColor(UiUtils.getThemeColor(text.getContext(), item.inset ? R.attr.colorM3OnSurfaceVariant : R.attr.colorM3OnSurface));
updateTranslation(false);
}
@Override
@@ -84,5 +119,43 @@ public class TextStatusDisplayItem extends StatusDisplayItem{
private CustomEmojiHelper getEmojiHelper(){
return item.emojiHelper;
}
public void updateTranslation(boolean updateText){
if(item.status==null)
return;
if(item.status.translationState==Status.TranslationState.HIDDEN){
if(translationFooter!=null)
translationFooter.setVisibility(View.GONE);
if(updateText){
text.setText(item.text);
}
}else{
if(translationFooter==null){
translationFooter=translationFooterStub.inflate();
translationInfo=findViewById(R.id.translation_info_text);
translationShowOriginal=findViewById(R.id.translation_show_original);
translationProgress=findViewById(R.id.translation_progress);
translationShowOriginal.setOnClickListener(v->item.parentFragment.togglePostTranslation(item.status, item.parentID));
}else{
translationFooter.setVisibility(View.VISIBLE);
}
if(item.status.translationState==Status.TranslationState.SHOWN){
translationProgress.setVisibility(View.GONE);
translationInfo.setVisibility(View.VISIBLE);
translationShowOriginal.setVisibility(View.VISIBLE);
translationInfo.setText(translationInfo.getContext().getString(R.string.post_translated, Locale.forLanguageTag(item.status.translation.detectedSourceLanguage).getDisplayLanguage(), item.status.translation.provider));
if(updateText){
if(item.translatedText==null){
item.setTranslatedText(item.status.translation.content);
}
text.setText(item.translatedText);
}
}else{ // LOADING
translationProgress.setVisibility(View.VISIBLE);
translationInfo.setVisibility(View.INVISIBLE);
translationShowOriginal.setVisibility(View.INVISIBLE);
}
}
}
}
}

View File

@@ -859,6 +859,8 @@ public class PhotoViewer implements ZoomPanView.Listener{
@Override
public void onVideoSizeChanged(MediaPlayer mp, int width, int height){
if(width<=0 || height<=0)
return;
FrameLayout.LayoutParams params=(FrameLayout.LayoutParams) wrap.getLayoutParams();
params.width=width;
params.height=height;

View File

@@ -119,6 +119,9 @@ public class ZoomPanView extends FrameLayout implements ScaleGestureDetector.OnS
int width=right-left;
int height=bottom-top;
if(width==0 || height==0)
return;
float scale=Math.min(width/(float)child.getWidth(), height/(float)child.getHeight());
minScale=scale;
maxScale=Math.max(3f, height/(float)child.getHeight());
@@ -306,8 +309,6 @@ public class ZoomPanView extends FrameLayout implements ScaleGestureDetector.OnS
}, 1f).setMinimumVisibleChange(DynamicAnimation.MIN_VISIBLE_CHANGE_ALPHA));
}
}else{
if(animatingTransition)
Log.w(TAG, "updateViewTransform: ", new Throwable().fillInStackTrace());
child.setScaleX(matrixValues[Matrix.MSCALE_X]);
child.setScaleY(matrixValues[Matrix.MSCALE_Y]);
child.setTranslationX(matrixValues[Matrix.MTRANS_X]);

View File

@@ -81,9 +81,10 @@ public class HtmlParser{
}
}
Map<String, String> idsByUrl=mentions.stream().collect(Collectors.toMap(m->m.url, m->m.id));
Map<String, String> idsByUrl=mentions.stream().distinct().collect(Collectors.toMap(m->m.url, m->m.id));
// Hashtags in remote posts have remote URLs, these have local URLs so they don't match.
// Map<String, String> tagsByUrl=tags.stream().collect(Collectors.toMap(t->t.url, t->t.name));
Map<String, Hashtag> tagsByTag=tags.stream().distinct().collect(Collectors.toMap(t->t.name.toLowerCase(), Function.identity()));
final SpannableStringBuilder ssb=new SpannableStringBuilder();
Jsoup.parseBodyFragment(source).body().traverse(new NodeVisitor(){
@@ -96,6 +97,7 @@ public class HtmlParser{
}else if(node instanceof Element el){
switch(el.nodeName()){
case "a" -> {
Object linkObject=null;
String href=el.attr("href");
LinkSpan.Type linkType;
if(el.hasClass("hashtag")){
@@ -103,6 +105,7 @@ public class HtmlParser{
if(text.startsWith("#")){
linkType=LinkSpan.Type.HASHTAG;
href=text.substring(1);
linkObject=tagsByTag.get(text.substring(1).toLowerCase());
}else{
linkType=LinkSpan.Type.URL;
}
@@ -117,7 +120,7 @@ public class HtmlParser{
}else{
linkType=LinkSpan.Type.URL;
}
openSpans.add(new SpanInfo(new LinkSpan(href, null, linkType, accountID), ssb.length(), el));
openSpans.add(new SpanInfo(new LinkSpan(href, null, linkType, accountID, linkObject), ssb.length(), el));
}
case "br" -> ssb.append('\n');
case "span" -> {
@@ -213,7 +216,7 @@ public class HtmlParser{
String url=matcher.group(3);
if(TextUtils.isEmpty(matcher.group(4)))
url="http://"+url;
ssb.setSpan(new LinkSpan(url, null, LinkSpan.Type.URL, null), matcher.start(3), matcher.end(3), 0);
ssb.setSpan(new LinkSpan(url, null, LinkSpan.Type.URL, null, null), matcher.start(3), matcher.end(3), 0);
}while(matcher.find()); // Find more URLs
return ssb;
}

View File

@@ -4,6 +4,7 @@ import android.content.Context;
import android.text.TextPaint;
import android.text.style.CharacterStyle;
import org.joinmastodon.android.model.Hashtag;
import org.joinmastodon.android.ui.utils.UiUtils;
public class LinkSpan extends CharacterStyle {
@@ -13,12 +14,14 @@ public class LinkSpan extends CharacterStyle {
private String link;
private Type type;
private String accountID;
private Object linkObject;
public LinkSpan(String link, OnLinkClickListener listener, Type type, String accountID){
public LinkSpan(String link, OnLinkClickListener listener, Type type, String accountID, Object linkObject){
this.listener=listener;
this.link=link;
this.type=type;
this.accountID=accountID;
this.linkObject=linkObject;
}
public int getColor(){
@@ -35,7 +38,12 @@ public class LinkSpan extends CharacterStyle {
switch(getType()){
case URL -> UiUtils.openURL(context, accountID, link);
case MENTION -> UiUtils.openProfileByID(context, accountID, link);
case HASHTAG -> UiUtils.openHashtagTimeline(context, accountID, link);
case HASHTAG -> {
if(linkObject instanceof Hashtag ht)
UiUtils.openHashtagTimeline(context, accountID, ht);
else
UiUtils.openHashtagTimeline(context, accountID, link);
}
case CUSTOM -> listener.onLinkClick(this);
}
}

View File

@@ -61,6 +61,7 @@ import org.joinmastodon.android.fragments.ProfileFragment;
import org.joinmastodon.android.fragments.ThreadFragment;
import org.joinmastodon.android.model.Account;
import org.joinmastodon.android.model.Emoji;
import org.joinmastodon.android.model.Hashtag;
import org.joinmastodon.android.model.Relationship;
import org.joinmastodon.android.model.Status;
import org.joinmastodon.android.ui.M3AlertDialogBuilder;
@@ -342,10 +343,17 @@ public class UiUtils{
Nav.go((Activity)context, ProfileFragment.class, args);
}
public static void openHashtagTimeline(Context context, String accountID, Hashtag hashtag){
Bundle args=new Bundle();
args.putString("account", accountID);
args.putParcelable("hashtag", Parcels.wrap(hashtag));
Nav.go((Activity)context, HashtagTimelineFragment.class, args);
}
public static void openHashtagTimeline(Context context, String accountID, String hashtag){
Bundle args=new Bundle();
args.putString("account", accountID);
args.putString("hashtag", hashtag);
args.putString("hashtagName", hashtag);
Nav.go((Activity)context, HashtagTimelineFragment.class, args);
}

View File

@@ -15,15 +15,12 @@ import android.widget.TextView;
import org.joinmastodon.android.R;
import org.joinmastodon.android.api.requests.search.GetSearchResults;
import org.joinmastodon.android.api.session.AccountSessionManager;
import org.joinmastodon.android.model.Account;
import org.joinmastodon.android.model.Emoji;
import org.joinmastodon.android.model.Hashtag;
import org.joinmastodon.android.model.SearchResults;
import org.joinmastodon.android.model.viewmodel.AccountViewModel;
import org.joinmastodon.android.ui.BetterItemAnimator;
import org.joinmastodon.android.ui.OutlineProviders;
import org.joinmastodon.android.ui.text.HtmlParser;
import org.joinmastodon.android.ui.utils.CustomEmojiHelper;
import org.joinmastodon.android.ui.utils.HideableSingleViewRecyclerAdapter;
import org.joinmastodon.android.ui.utils.UiUtils;
import org.joinmastodon.android.ui.views.FilterChipView;
@@ -96,6 +93,24 @@ public class ComposeAutocompleteViewController{
outRect.right=V.dp(8);
}
});
// Set empty adapter to prevent NPEs
list.setAdapter(new RecyclerView.Adapter<>(){
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType){
throw new UnsupportedOperationException();
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position){
}
@Override
public int getItemCount(){
return 0;
}
});
contentView.addView(list, new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
emptyButton=new FilterChipView(activity);
@@ -222,11 +237,13 @@ public class ComposeAutocompleteViewController{
}
private void doSearchUsers(){
currentRequest=new GetSearchResults(lastText, GetSearchResults.Type.ACCOUNTS, false)
currentRequest=new GetSearchResults(lastText, GetSearchResults.Type.ACCOUNTS, false, null, 0, 0)
.setCallback(new Callback<>(){
@Override
public void onSuccess(SearchResults result){
currentRequest=null;
if(mode!=Mode.USERS)
return;
List<AccountViewModel> oldList=users;
users=result.accounts.stream().map(a->new AccountViewModel(a, accountID)).collect(Collectors.toList());
if(isLoading){
@@ -256,7 +273,7 @@ public class ComposeAutocompleteViewController{
}
private void doSearchHashtags(){
currentRequest=new GetSearchResults(lastText, GetSearchResults.Type.HASHTAGS, false)
currentRequest=new GetSearchResults(lastText, GetSearchResults.Type.HASHTAGS, false, null, 0, 0)
.setCallback(new Callback<>(){
@Override
public void onSuccess(SearchResults result){

View File

@@ -27,10 +27,14 @@ import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import org.joinmastodon.android.MastodonApp;
import org.joinmastodon.android.R;
import org.joinmastodon.android.api.MastodonAPIController;
import org.joinmastodon.android.api.ProgressListener;
import org.joinmastodon.android.api.requests.statuses.CreateStatus;
import org.joinmastodon.android.api.requests.statuses.GetAttachmentByID;
import org.joinmastodon.android.api.requests.statuses.UpdateAttachment;
import org.joinmastodon.android.api.requests.statuses.UploadAttachment;
@@ -47,8 +51,11 @@ import org.parceler.Parcel;
import org.parceler.Parcels;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.Locale;
import java.util.Objects;
import java.util.function.Consumer;
@@ -540,6 +547,14 @@ public class ComposeMediaViewController{
public List<String> getAttachmentIDs(){
return attachments.stream().map(a->a.serverAttachment.id).collect(Collectors.toList());
}
public List<CreateStatus.Request.MediaAttribute> getAttachmentAttributes(){
List<CreateStatus.Request.MediaAttribute> mediaAttributes = new ArrayList<>();
for (DraftMediaAttachment att:attachments){
mediaAttributes.add(new CreateStatus.Request.MediaAttribute(att.serverAttachment.id, att.description, null));
}
return mediaAttributes;
}
public boolean isEmpty(){
return attachments.isEmpty();
@@ -582,7 +597,7 @@ public class ComposeMediaViewController{
public void saveAltTextsBeforePublishing(Runnable onSuccess, Consumer<ErrorResponse> onError){
ArrayList<UpdateAttachment> updateAltTextRequests=new ArrayList<>();
for(DraftMediaAttachment att:attachments){
if(!att.descriptionSaved){
if(!att.descriptionSaved && (fragment.editingStatus==null || !fragment.editingStatus.mediaAttachments.contains(att.serverAttachment))){
UpdateAttachment req=new UpdateAttachment(att.serverAttachment.id, att.description);
req.setCallback(new Callback<>(){
@Override

View File

@@ -74,9 +74,9 @@ public class ComposePollViewController{
pollWrap=view.findViewById(R.id.poll_wrap);
Instance instance=fragment.instance;
if(instance.configuration!=null && instance.configuration.polls!=null && instance.configuration.polls.maxOptions>0)
if(instance!=null && instance.configuration!=null && instance.configuration.polls!=null && instance.configuration.polls.maxOptions>0)
maxPollOptions=instance.configuration.polls.maxOptions;
if(instance.configuration!=null && instance.configuration.polls!=null && instance.configuration.polls.maxCharactersPerOption>0)
if(instance!=null && instance.configuration!=null && instance.configuration.polls!=null && instance.configuration.polls.maxCharactersPerOption>0)
maxPollOptionLength=instance.configuration.polls.maxCharactersPerOption;
pollOptionsView=pollWrap.findViewById(R.id.poll_options);

View File

@@ -18,7 +18,7 @@ public class MediaGridLayout extends ViewGroup{
public static final int MAX_WIDTH=400; // dp
private static final int GAP=2; // dp
private PhotoLayoutHelper.TiledLayoutResult tiledLayout;
private int[] columnStarts=new int[10], columnEnds=new int[10], rowStarts=new int[10], rowEnds=new int[10];
private int[] columnStarts, columnEnds, rowStarts, rowEnds;
public MediaGridLayout(Context context){
this(context, null);
@@ -45,6 +45,14 @@ public class MediaGridLayout extends ViewGroup{
width=Math.round(width*(tiledLayout.width/(float)PhotoLayoutHelper.MAX_WIDTH));
}
if(rowStarts==null || rowStarts.length<tiledLayout.rowSizes.length){
rowStarts=new int[tiledLayout.rowSizes.length];
rowEnds=new int[tiledLayout.rowSizes.length];
}
if(columnStarts==null || columnStarts.length<tiledLayout.columnSizes.length){
columnStarts=new int[tiledLayout.columnSizes.length];
columnEnds=new int[tiledLayout.columnSizes.length];
}
int offset=0;
for(int i=0;i<tiledLayout.columnSizes.length;i++){
columnStarts[i]=offset;
@@ -77,7 +85,7 @@ public class MediaGridLayout extends ViewGroup{
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b){
if(tiledLayout==null)
if(tiledLayout==null || rowStarts==null)
return;
int maxWidth=V.dp(MAX_WIDTH);

View File

@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M11,17H13V11H11ZM12,9Q12.425,9 12.713,8.712Q13,8.425 13,8Q13,7.575 12.713,7.287Q12.425,7 12,7Q11.575,7 11.288,7.287Q11,7.575 11,8Q11,8.425 11.288,8.712Q11.575,9 12,9ZM12,22Q8.525,21.125 6.263,18.012Q4,14.9 4,11.1V5L12,2L20,5V11.1Q20,14.9 17.738,18.012Q15.475,21.125 12,22ZM12,19.9Q14.6,19.075 16.3,16.6Q18,14.125 18,11.1V6.375L12,4.125L6,6.375V11.1Q6,14.125 7.7,16.6Q9.4,19.075 12,19.9ZM12,12Q12,12 12,12Q12,12 12,12Q12,12 12,12Q12,12 12,12Z"/>
</vector>

View File

@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M2,14Q1.175,14 0.588,13.412Q0,12.825 0,12V6Q0,5.7 0.125,5.425Q0.25,5.15 0.45,4.95L5.4,0L6.15,0.75Q6.3,0.9 6.4,1.137Q6.5,1.375 6.5,1.6V1.8L5.8,5H11Q11.425,5 11.713,5.287Q12,5.575 12,6V7.25Q12,7.4 11.975,7.537Q11.95,7.675 11.9,7.8L9.65,13.1Q9.475,13.525 9.088,13.762Q8.7,14 8.25,14ZM7.95,12 L10,7.15V7Q10,7 10,7Q10,7 10,7H3.35L3.95,4.3L2,6.2V12Q2,12 2,12Q2,12 2,12ZM18.6,24 L17.85,23.25Q17.7,23.1 17.6,22.863Q17.5,22.625 17.5,22.4V22.2L18.2,19H13Q12.575,19 12.288,18.712Q12,18.425 12,18V16.75Q12,16.6 12.025,16.462Q12.05,16.325 12.1,16.2L14.35,10.9Q14.55,10.475 14.925,10.238Q15.3,10 15.75,10H22Q22.825,10 23.413,10.587Q24,11.175 24,12V18Q24,18.3 23.888,18.562Q23.775,18.825 23.55,19.05ZM16.05,12 L14,16.85V17Q14,17 14,17Q14,17 14,17H20.65L20.05,19.7L22,17.8V12Q22,12 22,12Q22,12 22,12ZM2,12V6.2V7Q2,7 2,7Q2,7 2,7V7.15V12Q2,12 2,12Q2,12 2,12ZM22,12V17.8V17Q22,17 22,17Q22,17 22,17V16.85V12Q22,12 22,12Q22,12 22,12Z"/>
</vector>

View File

@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:layout_height="wrap_content"
android:orientation="vertical">
<org.joinmastodon.android.ui.views.LinkedTextView
android:id="@+id/text"
@@ -16,4 +17,10 @@
android:paddingBottom="8dp"
android:textAppearance="@style/m3_body_large"/>
</FrameLayout>
<ViewStub
android:id="@+id/translation_info"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout="@layout/footer_text_translation"/>
</LinearLayout>

View File

@@ -0,0 +1,44 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ProgressBar
android:id="@+id/translation_progress"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_gravity="center"
style="?android:progressBarStyleSmall"/>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingHorizontal="16dp"
android:paddingVertical="8dp"
android:clipToPadding="false"
android:baselineAligned="false"
android:gravity="center_vertical">
<TextView
android:id="@+id/translation_info_text"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textAppearance="@style/m3_body_small"
android:textColor="?colorM3Secondary"
tools:text="Translated from Japanese using DeepL.com"/>
<Button
android:id="@+id/translation_show_original"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
style="@style/Widget.Mastodon.M3.Button.Text"
android:paddingHorizontal="8dp"
android:layout_marginEnd="-8dp"
android:text="@string/translation_show_original"/>
</LinearLayout>
</FrameLayout>

View File

@@ -0,0 +1,62 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingHorizontal="16dp"
android:paddingBottom="8dp">
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toStartOf="@id/follow_btn_wrap"
android:layout_marginEnd="8dp"
android:textAppearance="@style/m3_headline_small"
android:textColor="?colorM3OnSurface"
android:maxLines="4"
android:ellipsize="end"
android:minHeight="36dp"
android:gravity="center_vertical"
tools:text="#CatsOfMastodonButLong"/>
<FrameLayout
android:id="@+id/follow_btn_wrap"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@id/title"
android:layout_alignBottom="@id/title"
android:layout_alignParentEnd="true">
<org.joinmastodon.android.ui.views.ProgressBarButton
android:id="@+id/profile_action_btn"
android:layout_width="wrap_content"
android:layout_height="36dp"
android:layout_gravity="center"
style="@style/Widget.Mastodon.M3.Button.Filled"
android:paddingHorizontal="16dp"
tools:text="@string/button_follow" />
<ProgressBar
android:id="@+id/action_progress"
style="?android:progressBarStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:elevation="10dp"
android:indeterminate="true"
android:outlineProvider="none"
android:visibility="gone" />
</FrameLayout>
<TextView
android:id="@+id/subtitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/title"
android:layout_marginTop="8dp"
android:textAppearance="@style/m3_label_large"
android:textColor="?colorM3OnSurfaceVariant"
tools:text="123 posts"/>
</RelativeLayout>

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:id="@+id/menu_group1">
<!-- TODO translate -->
<item android:id="@+id/translate" android:title="@string/translate_post"/>
<item android:id="@+id/bookmark" android:title="@string/add_bookmark"/>
<item android:id="@+id/share" android:title="@string/button_share"/>
<item android:id="@+id/open_in_browser" android:title="@string/open_in_browser"/>

View File

@@ -8,7 +8,7 @@
<string name="ok">حسنًا</string>
<string name="preparing_auth">جَارٍ الإعدَادُ لِلمُصادَقَة…</string>
<string name="finishing_auth">يُنهي المصادقة…</string>
<string name="user_boosted">%s إعادة نشر</string>
<string name="user_boosted">قام %s بإعادة نشر</string>
<string name="in_reply_to">ردًا على %s</string>
<string name="notifications">الإشعارات</string>
<string name="user_followed_you">%s بَدَأ بِمُتابَعَتِك</string>
@@ -182,7 +182,7 @@
<string name="report_reason_spam">إنه غير مرغوب فيه</string>
<string name="report_reason_spam_subtitle">روابط خبيثة أو تفاعل كاذب أو ردود متكررة</string>
<string name="report_reason_violation">ينتهك قواعد الخادم</string>
<string name="report_reason_violation_subtitle">تعلم أنه ينتهك قواعد محددة</string>
<string name="report_reason_violation_subtitle">أنت مُدرك لانتهاكه قواعد مُحَدَّدَة</string>
<string name="report_reason_other">إنَّهُ شَيءٌ آخَر</string>
<string name="report_reason_other_subtitle">لا تندرج هذه المشكلة ضمن فئات أخرى</string>
<string name="report_choose_rule">ما هي القواعد المنتهكة؟</string>
@@ -242,7 +242,7 @@
<string name="skip">تخطى</string>
<string name="notification_type_follow">متابعُون جُدُد</string>
<string name="notification_type_favorite">المفضلة</string>
<string name="notification_type_reblog">المشاركات</string>
<string name="notification_type_reblog">المعاد نشرها</string>
<string name="notification_type_mention">الإشارات</string>
<string name="notification_type_poll">استطلاع رأي</string>
<string name="choose_account">اختر حسابًا</string>
@@ -277,7 +277,7 @@
<string name="more_options">مزيد من الخيارات</string>
<string name="new_post">منشور جديد</string>
<string name="button_reply">ردّ</string>
<string name="button_reblog">شارك</string>
<string name="button_reblog">إعادة النشر</string>
<string name="button_favorite">فضّل</string>
<string name="button_share">شارك</string>
<string name="media_no_description">وسائط بدون وصف</string>
@@ -292,8 +292,8 @@
<string name="followed_user">أنت تتابع الآن %s</string>
<string name="following_user_requested">طَلَبَ %s مُتابَعتك</string>
<string name="open_in_browser">افتح في المتصفح</string>
<string name="hide_boosts_from_user">اخف مشاركات %s</string>
<string name="show_boosts_from_user">أظهر مشاركات %s</string>
<string name="hide_boosts_from_user">أخفِ المعاد نشرها مِن %s</string>
<string name="show_boosts_from_user">أظهر ما أعاد %s نشرَه</string>
<string name="signup_reason">لماذا تريد الانضمام؟</string>
<string name="signup_reason_note">هذا سوف يساعدنا في مراجعة تطبيقك.</string>
<string name="clear">امسح</string>
@@ -346,10 +346,10 @@
<item quantity="other">%,d تفضيل</item>
</plurals>
<plurals name="x_reblogs">
<item quantity="zero">%,d إعادة نشر</item>
<item quantity="zero">لم يُعد نشره</item>
<item quantity="one">إعادة نشر واحدة</item>
<item quantity="two">أعيد نشره مرّتان</item>
<item quantity="few">أعيد نشره %,d مرة</item>
<item quantity="few">أعيد نشره %,d مرات</item>
<item quantity="many">أعيد نشره %,d مرات</item>
<item quantity="other">أعيد نشره %,d مرات</item>
</plurals>
@@ -362,7 +362,7 @@
<item quantity="zero">منذ %d ثانية</item>
<item quantity="one">منذ ثانية</item>
<item quantity="two">منذ ثانيتان</item>
<item quantity="few">%d ثواني</item>
<item quantity="few">%d ثوانٍ</item>
<item quantity="many">منذ %d ثانية</item>
<item quantity="other">%d ثواني مضت</item>
</plurals>
@@ -463,7 +463,7 @@
<string name="welcome_to_mastodon">أهلًا بك على ماستدون</string>
<string name="welcome_paragraph1">ماستدون شبكة اجتماعية لامركزية، بمعنى أنه ليس هناك شركة واحدة تتحكم فيها. وهي تتألف من العديد من الخوادم التي تدار بشكل مستقل، وجميعها متصلة معا.</string>
<string name="what_are_servers">ما هي الخوادم؟</string>
<string name="welcome_paragraph2"><![CDATA[تتم استضافة كل حساب ماستدون على خادم - ولكل منها قيمه وقواعده ومسؤوليه الخاصين. بغض النظر عن الشخص الذي تختاره ، يمكنك متابعة الأشخاص والتفاعل معهم على أي خادم.]]></string>
<string name="welcome_paragraph2">تتم استضافة كل حساب ماستدون على خادم - ولكل خادم قيمه وقواعده ومسؤوليه الخاصين. مهما اخترت أي خادم، يمكنك متابعة الأشخاص والتفاعل معهم على أي خادم آخر.</string>
<string name="opening_link">رابط الافتتاح…</string>
<string name="link_not_supported">هذا الرابط غير مدعوم في التطبيق</string>
<string name="log_out_all_accounts">تسجيل الخروج من جميع الحسابات</string>
@@ -694,8 +694,22 @@
<string name="posts_matching_string">منشورات تحتوي على “%s”</string>
<string name="accounts_matching_string">أشخاص لديهم \"%s\"</string>
<!-- Shown in the post header. Please keep it short -->
<string name="time_seconds_ago_short">مُنذُ %dث</string>
<string name="time_minutes_ago_short">مُنذُ %dش</string>
<string name="time_hours_ago_short">مُنذُ %dس</string>
<string name="time_days_ago_short">مُنذُ %dي</string>
<string name="time_seconds_ago_short">مُنذُ %dثا</string>
<string name="time_minutes_ago_short">مُنذُ %dد</string>
<string name="time_hours_ago_short">مُنذُ %dسا</string>
<string name="time_days_ago_short">مُنذُ %d أيام</string>
<!-- %s is the name of the post language -->
<string name="translate_post">تُرجِم مِن %s</string>
<!-- %1$s is the language, %2$s is the name of the translation service -->
<string name="post_translated">مُترجَم مِن %1$s باستخدام %2$s</string>
<string name="translation_show_original">إظهار الأصل</string>
<string name="translation_failed">فشِلَت الترجَمة. قد لم يتمكّن مدير الخادم من تفعيل الترجمات على هذا الخادم أو أنّ هذا الخادم يُشغِّل نسخة قديمة من ماستدون حيث الترجمات غير مدعومة بعد.</string>
<plurals name="x_participants">
<item quantity="zero">لا مُشارِك</item>
<item quantity="one">مشارِك واحد</item>
<item quantity="two">مشاركَيْنِ</item>
<item quantity="few">مشاركين</item>
<item quantity="many">مُشارِكًا</item>
<item quantity="other">مُشارك</item>
</plurals>
</resources>

View File

@@ -404,7 +404,6 @@
<string name="welcome_to_mastodon">Вітаем у Mastodon</string>
<string name="welcome_paragraph1">Mastodon - гэта дэцэнтралізаваная сацыяльная сетка, што азначае, што ні адна кампанія не кантралюе яе. Яна складаецца з мноства незалежна працуючых сервераў, злучаных разам.</string>
<string name="what_are_servers">Што такое серверы?</string>
<string name="welcome_paragraph2"><![CDATA[Кожны акаўнт Mastodon размяшчаецца на серверы - кожны са сваімі каштоўнасцямі, правіламі і адміністратарамі. Незалежна ад таго, які сервер вы вылучыце, вы можаце сачыць і ўзаемадзейнічаць з людзьмі на любым серверы.]]></string>
<string name="retry">Паўтарыць</string>
<!-- %s is formatted file size ("467 KB image") -->
<string name="attachment_type_video">Відэа</string>
@@ -528,4 +527,6 @@
<string name="time_minutes_ago_short">%d хв таму</string>
<string name="time_hours_ago_short">%d г таму</string>
<string name="time_days_ago_short">%d дз таму</string>
<!-- %s is the name of the post language -->
<!-- %1$s is the language, %2$s is the name of the translation service -->
</resources>

View File

@@ -2,6 +2,7 @@
<resources>
<string name="log_in">লগ ইন করুন</string>
<string name="next">এরপর</string>
<string name="loading_instance">সার্ভারের তথ্য পুনরূদ্ধার করা হচ্ছে…</string>
<string name="error">কোনো ত্রুটি ঘটেছে</string>
<string name="ok">ঠিক আছে</string>
<string name="preparing_auth">প্রমাণীকরণের জন্য প্রস্তুত হচ্ছে...</string>
@@ -65,6 +66,10 @@
<item quantity="one">%d দিন বাকি</item>
<item quantity="other">%d দিন বাকি</item>
</plurals>
<plurals name="x_votes">
<item quantity="one">%,d ভোট</item>
<item quantity="other">%,d ভোট</item>
</plurals>
<string name="poll_closed">বন্ধ</string>
<string name="confirm_mute_title">অ্যাকাউন্টটি মিউট করুন</string>
<string name="do_mute">মিউট করুন</string>
@@ -123,6 +128,8 @@
<string name="category_tech">তথ্য-প্রযুক্তি</string>
<string name="confirm_email_title">আপনার ইনবক্স দেখুন</string>
<!-- %s is the email address -->
<string name="open_email_app">ই-মেইল অ্যাপ খুলুন</string>
<string name="resent_email">নিশ্চিতকরনের ই-মেইল পাঠানো হয়েছে</string>
<string name="visibility_followers_only">ফলোয়ারদের জন্য</string>
<string name="notification_type_follow">নতুন ফলোয়াররা</string>
<string name="err_not_logged_in">Mastodon-এ প্রথমে লগ ইন করুন</string>
@@ -181,7 +188,6 @@
<string name="welcome_to_mastodon">Mastodon - এ আপনাকে স্বাগত জানাই</string>
<string name="welcome_paragraph1">Mastodon হল একটি বিকেন্দ্রীভূত সামাজিক নেটওয়ার্ক, যার মানে কোনো একক কোম্পানি এটিকে নিয়ন্ত্রণ করে না। এটি অনেকগুলি স্বাধীনভাবে চালিত সার্ভারের সমন্বয়ে গঠিত, যেখানে সব সার্ভারগুলি একসাথে সংযুক্ত৷</string>
<string name="what_are_servers">সার্ভার কি?</string>
<string name="welcome_paragraph2"><![CDATA[প্রতিটি Mastodon অ্যাকাউন্টকে একটি সার্ভারে হোস্ট করা হয় — প্রত্যেকটির নিজস্ব মান, নিয়ম এবং প্রশাসক (অ্যাডমিন) রয়েছে। আপনি যে কোনো সার্ভারই বেছে নিন না কেন তা বিবেচ্য নয়, আপনি যেকোনো সার্ভারের লোকেদের সাথে যোগাযোগ করতে এবং তাদের ফলো করতে পারেন।]]></string>
<!-- %s is formatted file size ("467 KB image") -->
<!-- %s is the server domain -->
<!-- Shown on the "stamp" on the screen that appears after you report a post/user. Please keep the translation short, preferably a single word -->
@@ -193,4 +199,6 @@
<!-- %s is the timestamp ("tomorrow at 12:34") -->
<!-- Shown like a content warning, %s is the name of the filter -->
<!-- Shown in the post header. Please keep it short -->
<!-- %s is the name of the post language -->
<!-- %1$s is the language, %2$s is the name of the translation service -->
</resources>

View File

@@ -182,4 +182,6 @@
<!-- %s is the timestamp ("tomorrow at 12:34") -->
<!-- Shown like a content warning, %s is the name of the filter -->
<!-- Shown in the post header. Please keep it short -->
<!-- %s is the name of the post language -->
<!-- %1$s is the language, %2$s is the name of the translation service -->
</resources>

View File

@@ -293,4 +293,6 @@
<!-- %s is the timestamp ("tomorrow at 12:34") -->
<!-- Shown like a content warning, %s is the name of the filter -->
<!-- Shown in the post header. Please keep it short -->
<!-- %s is the name of the post language -->
<!-- %1$s is the language, %2$s is the name of the translation service -->
</resources>

View File

@@ -425,7 +425,6 @@
<string name="welcome_to_mastodon">Vítejte na Mastodonu</string>
<string name="welcome_paragraph1">Mastodon je decentralizovaná sociální síť, což znamená, že ji neovládá žádná jednotlivá společnost. Skládá se z mnoha nezávisle spravovaných serverů, všechny jsou propojeny dohromady.</string>
<string name="what_are_servers">Co jsou to servery?</string>
<string name="welcome_paragraph2"><![CDATA[Každý účet Mastodon je hostován na serveru - každý s vlastními hodnotami, pravidly a správci. Bez ohledu na to, který si vyberete, můžete sledovat a komunikovat s lidmi na jakémkoliv serveru.]]></string>
<string name="opening_link">Odkaz se otevírá…</string>
<string name="link_not_supported">Tento odkaz není v aplikaci podporovaný</string>
<string name="log_out_all_accounts">Odhlásit se ze všech účtů</string>
@@ -640,4 +639,6 @@
<string name="time_minutes_ago_short">Před %dm</string>
<string name="time_hours_ago_short">Před %dh</string>
<string name="time_days_ago_short">Před %dd</string>
<!-- %s is the name of the post language -->
<!-- %1$s is the language, %2$s is the name of the translation service -->
</resources>

View File

@@ -387,7 +387,6 @@
<string name="welcome_to_mastodon">Velkommen til Mastodon</string>
<string name="welcome_paragraph1">Mastodon er et decentraliseret socialt netværk, hvilket betyder at ingen enkelt virksomhed styrer det. Det består af mange uafhængige servere, alle forbundet sammen.</string>
<string name="what_are_servers">Hvad er servere?</string>
<string name="welcome_paragraph2"><![CDATA[Alle Mastodon-konti har plads på en server. Hver server har sine egne værdier, regler og administratorer. Ligegyldigt hvilken server du vælger, kan du følge og interagere med folk på alle andre servere.]]></string>
<string name="opening_link">Åbner link…</string>
<string name="link_not_supported">Linket er ikke understøttet i appen</string>
<string name="log_out_all_accounts">Log ud af alle konti</string>
@@ -504,4 +503,6 @@
<string name="search_open_url">Åbn URL i Mastodon</string>
<string name="posts_matching_hashtag">Indlæg med “%s”</string>
<!-- Shown in the post header. Please keep it short -->
<!-- %s is the name of the post language -->
<!-- %1$s is the language, %2$s is the name of the translation service -->
</resources>

View File

@@ -43,8 +43,8 @@
<string name="block_user">%s sperren</string>
<string name="unblock_user">%s entsperren</string>
<string name="report_user">%s melden</string>
<string name="block_domain">%s sperren</string>
<string name="unblock_domain">%s nicht mehr sperren</string>
<string name="block_domain">%s blockieren</string>
<string name="unblock_domain">%s nicht mehr blockieren</string>
<plurals name="x_posts">
<item quantity="one">%,d Beitrag</item>
<item quantity="other">%,d Beiträge</item>
@@ -98,12 +98,12 @@
<string name="do_unmute">Nicht mehr stummschalten</string>
<string name="confirm_block_title">Konto sperren</string>
<string name="confirm_block_domain_title">Domain sperren</string>
<string name="confirm_block">Bestätigen, um %s zu sperren</string>
<string name="confirm_block">Bestätigen, um %s zu blockieren</string>
<string name="do_block">Sperren</string>
<string name="confirm_unblock_title">Konto nicht mehr sperren</string>
<string name="confirm_unblock_domain_title">Domain nicht mehr blockieren</string>
<string name="confirm_unblock">Bestätigen, um Sperre von %s aufzuheben</string>
<string name="do_unblock">Sperre aufheben</string>
<string name="confirm_unblock">Bestätigen, um %s nicht mehr zu blockieren</string>
<string name="do_unblock">Nicht mehr blockieren</string>
<string name="button_blocked">Blockiert</string>
<string name="action_vote">Abstimmen</string>
<string name="delete">Löschen</string>
@@ -387,7 +387,6 @@
<string name="welcome_to_mastodon">Willkommen auf Mastodon</string>
<string name="welcome_paragraph1">Mastodon ist ein dezentrales, soziales Netzwerk. Das bedeutet, dass es nicht von einem einzigen Unternehmen kontrolliert wird. Das Netzwerk besteht aus unabhängig voneinander betriebenen Servern, die miteinander verbunden sind.</string>
<string name="what_are_servers">Was sind Server?</string>
<string name="welcome_paragraph2"><![CDATA[Jedes Mastodon-Konto wird auf einem Server gehostet. Jeder Server hat dabei seine eigenen Werte, Regeln und Administrator*innen. Aber egal, für welchen Server Du Dich entscheidest: Du kannst mit Leuten von anderen Servern interagieren und ihnen folgen.]]></string>
<string name="opening_link">Link wird geöffnet…</string>
<string name="link_not_supported">Dieser Link wird in der App nicht unterstützt</string>
<string name="log_out_all_accounts">Von allen Konten abmelden</string>
@@ -582,4 +581,6 @@
<string name="time_minutes_ago_short">vor %d Minuten</string>
<string name="time_hours_ago_short">vor %d Stunden</string>
<string name="time_days_ago_short">vor %d Tagen</string>
<!-- %s is the name of the post language -->
<!-- %1$s is the language, %2$s is the name of the translation service -->
</resources>

View File

@@ -387,7 +387,7 @@
<string name="welcome_to_mastodon">Καλώς ήρθες στο Mastodon</string>
<string name="welcome_paragraph1">Το Mastodon είναι ένα αποκεντρωμένο κοινωνικό δίκτυο που σημαίνει ότι καμία εταιρεία δεν το ελέγχει. Αποτελείται από πολλούς ανεξάρτητους διακομιστές, όλοι συνδεδεμένοι μαζί.</string>
<string name="what_are_servers">Τι είναι οι διακομιστές;</string>
<string name="welcome_paragraph2"><![CDATA[Κάθε λογαριασμός Mastodon φιλοξενείται σε ένα διακομιστή - ο καθένας με τις δικές του αξίες, κανόνες και διαχειριστές. Ανεξάρτητα από το ποιον μπορεί να επιλέξεις, μπορείς να ακολουθήσεις και να αλληλεπιδράσεις με άτομα από οποιονδήποτε διακομιστή.]]></string>
<string name="welcome_paragraph2">Κάθε λογαριασμός Mastodon φιλοξενείται σε ένα διακομιστή - ο καθένας με τις δικές του αξίες, κανόνες &amp; διαχειριστές. Ανεξάρτητα από το ποιον μπορεί να επιλέξεις, μπορείς να ακολουθήσεις και να αλληλεπιδράσεις με άτομα από οποιονδήποτε διακομιστή.</string>
<string name="opening_link">Άνοιγμα συνδέσμου…</string>
<string name="link_not_supported">Αυτός ο σύνδεσμος δεν υποστηρίζεται στην εφαρμογή</string>
<string name="log_out_all_accounts">Αποσύνδεση από όλους τους λογαριασμούς</string>
@@ -582,4 +582,21 @@
<string name="time_minutes_ago_short">%dλ πριν</string>
<string name="time_hours_ago_short">%dώ πριν</string>
<string name="time_days_ago_short">%dημ πριν</string>
<!-- %s is the name of the post language -->
<string name="translate_post">Μετάφραση από %s</string>
<!-- %1$s is the language, %2$s is the name of the translation service -->
<string name="post_translated">Μεταφράστηκε από %1$s χρησιμοποιώντας %2$s</string>
<string name="translation_show_original">Εμφάνιση αρχικού</string>
<string name="translation_failed">Η μετάφραση απέτυχε. Ίσως ο διαχειριστής δεν έχει ενεργοποιήσει μεταφράσεις σε αυτόν τον διακομιστή ή αυτός ο διακομιστής εκτελεί μια παλαιότερη έκδοση του Mastodon όπου οι μεταφράσεις δεν υποστηρίζονται ακόμα.</string>
<string name="settings_privacy">Ιδιωτικότητα και προσιτότητα</string>
<string name="settings_discoverable">Παροχή προφίλ και δημοσιεύσεων σε αλγορίθμους ανακάλυψης</string>
<string name="settings_indexable">Συμπερίληψη δημόσιων αναρτήσεων στα αποτελέσματα αναζήτησης</string>
<plurals name="x_participants">
<item quantity="one">%,d συμμετέχων</item>
<item quantity="other">%,d συμμετέχοντες</item>
</plurals>
<plurals name="x_posts_today">
<item quantity="one">%,d ανάρτηση σήμερα</item>
<item quantity="other">%,d αναρτήσεις σήμερα</item>
</plurals>
</resources>

View File

@@ -387,7 +387,6 @@
<string name="welcome_to_mastodon">Bienvenido/da a Mastodon</string>
<string name="welcome_paragraph1">Mastodon es una red social descentralizada, lo que significa que no la controla una sola compañía. Está formada por muchos servidores independientes, todos juntos conectados.</string>
<string name="what_are_servers">¿Qué son los servidores?</string>
<string name="welcome_paragraph2"><![CDATA[Cada cuenta de Mastodon está alojada en un servidor — cada uno con sus propios valores, reglas y administradores. No importa cual elijas, puede seguir e interactuar con personas en cualquier servidor.]]></string>
<string name="opening_link">Abriendo enlace…</string>
<string name="link_not_supported">Este enlace no es compatible con la aplicación</string>
<string name="log_out_all_accounts">Cerrar sesión en todas las cuentas</string>
@@ -574,4 +573,6 @@
<string name="time_minutes_ago_short">hace %dm</string>
<string name="time_hours_ago_short">hace %dh</string>
<string name="time_days_ago_short">hace %dd</string>
<!-- %s is the name of the post language -->
<!-- %1$s is the language, %2$s is the name of the translation service -->
</resources>

View File

@@ -11,6 +11,10 @@
<string name="user_boosted">%s(e)k bultzatu du</string>
<string name="in_reply_to">%s-(r)i erantzunez</string>
<string name="notifications">Jakinarazpenak</string>
<string name="user_followed_you">%s(e)k jarraitu zaitu</string>
<string name="user_sent_follow_request">%s-(e)k jarraitzeko eskaera bidali dizu</string>
<string name="user_favorited">%s(e)k zure bidalketa gogoko du</string>
<string name="notification_boosted">%s(e)k zure bidalketa bultzatu du</string>
<string name="share_toot_title">Partekatu</string>
<string name="settings">Ezarpenak</string>
<string name="publish">Argitaratu</string>
@@ -32,6 +36,7 @@
<string name="button_follow">Jarraitu</string>
<string name="button_following">Jarraitzen</string>
<string name="edit_profile">Editatu profila</string>
<string name="share_user">Partekatu profila</string>
<string name="mute_user">Mututu %s</string>
<string name="unmute_user">Desmututu %s</string>
<string name="block_user">Blokeatu %s</string>
@@ -436,4 +441,6 @@
<string name="clear_all">Garbitu dena</string>
<string name="search_open_url">Ireki URLa Mastodonen</string>
<!-- Shown in the post header. Please keep it short -->
<!-- %s is the name of the post language -->
<!-- %1$s is the language, %2$s is the name of the translation service -->
</resources>

View File

@@ -387,7 +387,7 @@
<string name="welcome_to_mastodon">به ماستودون خوش آمدید</string>
<string name="welcome_paragraph1">ماستودون یک شبکه اجتماعی غیر متمرکز است،به این معنی که هیچ شرکتی آن را کنترل نمی کند. این از بسیاری از کارسازهای مستقل تشکیل شده است که همه به هم متصل هستند.</string>
<string name="what_are_servers">کارساز شما کجاست؟</string>
<string name="welcome_paragraph2"><![CDATA[هر حساب ماستودون بر روی یک سرور میزبانی می شود — هر کدام با مقادیر، قوانین و مدیران خاص خود. مهم نیست کدام یک را انتخاب می کنید، می توانید افراد را در هر کارسازی دنبال کنید و با آنها تعامل داشته باشید.]]></string>
<string name="welcome_paragraph2">هر حساب ماستودون بر روی یک سرور میزبانی می شود — هر کدام با مقادیر، قوانین، &amp; مدیران خاص خود. مهم نیست کدام یک را انتخاب می کنید، می توانید افراد را در هر کارسازی دنبال کنید و با آنها تعامل داشته باشید.</string>
<string name="opening_link">باز کردن پیوند…</string>
<string name="link_not_supported">این پیوند در کاره پشتیبانی نمی شود</string>
<string name="log_out_all_accounts">از همه حساب‌ها خارج شوید</string>
@@ -582,4 +582,21 @@
<string name="time_minutes_ago_short">%d؜دقيقه پيش</string>
<string name="time_hours_ago_short">%dساعت پيش</string>
<string name="time_days_ago_short">%dروز پیش</string>
<!-- %s is the name of the post language -->
<string name="translate_post">ترجمه از %s</string>
<!-- %1$s is the language, %2$s is the name of the translation service -->
<string name="post_translated">ترجمه از %1$s با %2$s</string>
<string name="translation_show_original">نمایش اصلی</string>
<string name="translation_failed">ترجمه ناموفق بود. شاید مدیر ترجمه‌ها را در این کارساز فعال نکرده باشد یا این کارساز نسخه قدیمی ماستودون را اجرا می کند که در آن ترجمه‌ها هنوز پشتیبانی نمی شوند.</string>
<string name="settings_privacy">محرمانگی و دسترسی</string>
<string name="settings_discoverable">مشخص کردن مشخصات و فرسته‌ها در الگوریتم‌های اکتشاف</string>
<string name="settings_indexable">قرار دادن فرسته‌های عمومی در نتایج جستجو</string>
<plurals name="x_participants">
<item quantity="one">%,d شرکت کننده</item>
<item quantity="other">%,d شرکت‌کننده</item>
</plurals>
<plurals name="x_posts_today">
<item quantity="one">%,d فرسته امروز</item>
<item quantity="other">%,d فرسته امروز</item>
</plurals>
</resources>

View File

@@ -2,13 +2,167 @@
<resources>
<string name="log_in">Kirjaudu sisään</string>
<string name="next">Seuraava</string>
<string name="loading_instance">Haetaan palvelimen tietoja…</string>
<string name="error">Virhe</string>
<string name="not_a_mastodon_instance">%s ei näytä olevan Mastodonin palvelin.</string>
<string name="ok">OK</string>
<string name="preparing_auth">Valmistellaan todennusta…</string>
<string name="finishing_auth">Viimeistellään todennusta…</string>
<string name="user_boosted">%s tehosti</string>
<string name="in_reply_to">Vastauksessa %s</string>
<string name="notifications">Ilmoitukset</string>
<string name="user_followed_you">%s seurasi sinua</string>
<string name="user_sent_follow_request">%s lähetti sinulle seurauspyynnön</string>
<string name="user_favorited">%s tykkäsi julkaisustasi</string>
<string name="notification_boosted">%s tehosti viestiäsi</string>
<string name="poll_ended">Katso tulokset äänestyksestä johon osallistuit</string>
<string name="share_toot_title">Jaa</string>
<string name="settings">Asetukset</string>
<string name="publish">Julkaise</string>
<string name="discard_draft">Hylkää luonnos?</string>
<string name="discard">Hylkää</string>
<string name="cancel">Kumoa</string>
<plurals name="followers">
<item quantity="one">seuraaja</item>
<item quantity="other">seuraajat</item>
</plurals>
<plurals name="following">
<item quantity="one">seurataan</item>
<item quantity="other">seurataan</item>
</plurals>
<string name="posts">Viestit</string>
<string name="posts_and_replies">Viestit ja vastaukset</string>
<string name="media">Media</string>
<string name="profile_about">Tietoja</string>
<string name="button_follow">Seuraa</string>
<string name="button_following">Seurataan</string>
<string name="edit_profile">Muokkaa profiilia</string>
<string name="share_user">Jaa profiili</string>
<string name="mute_user">Mykistä %s</string>
<string name="unmute_user">Poista mykistys tililtä %s</string>
<string name="block_user">Estä %s</string>
<string name="unblock_user">Poista käyttäjän %s esto</string>
<string name="report_user">Raportoi %s</string>
<string name="block_domain">Estä %s</string>
<string name="unblock_domain">Poista käyttäjän %s esto</string>
<plurals name="x_posts">
<item quantity="one">%,d julkaisu</item>
<item quantity="other">%,d julkaisua</item>
</plurals>
<string name="profile_joined">Liittynyt</string>
<string name="done">Valmis</string>
<string name="loading">Ladataan…</string>
<string name="field_label">Nimi</string>
<string name="field_content">Sisältö</string>
<string name="saving">Tallennetaan…</string>
<string name="post_from_user">Julkaisu tililtä %s</string>
<string name="poll_option_hint">Vaihtoehto %d</string>
<plurals name="x_minutes">
<item quantity="one">%d minuutti</item>
<item quantity="other">%d minuuttia</item>
</plurals>
<plurals name="x_hours">
<item quantity="one">%d tunti</item>
<item quantity="other">%d tuntia</item>
</plurals>
<plurals name="x_days">
<item quantity="one">%d päivä</item>
<item quantity="other">%d päivää</item>
</plurals>
<plurals name="x_seconds_left">
<item quantity="one">%d sekunti jäljellä</item>
<item quantity="other">%d sekunttia jäljellä</item>
</plurals>
<plurals name="x_minutes_left">
<item quantity="one">%d minuutti jäljellä</item>
<item quantity="other">%d minuuttia jäljellä</item>
</plurals>
<plurals name="x_hours_left">
<item quantity="one">%d tunti jäljellä</item>
<item quantity="other">%d tuntia jäljellä</item>
</plurals>
<plurals name="x_days_left">
<item quantity="one">%d päivä jäljellä</item>
<item quantity="other">%d päivää jäljellä</item>
</plurals>
<plurals name="x_votes">
<item quantity="one">%d ääni</item>
<item quantity="other">%d ääntä</item>
</plurals>
<string name="poll_closed">Suljettu</string>
<string name="confirm_mute_title">Mykistä tili</string>
<string name="confirm_mute">Vahvista käyttäjän %s mykistys</string>
<string name="do_mute">Mykistä</string>
<string name="confirm_unmute_title">Poista tilin mykistys</string>
<string name="confirm_unmute">Vahvista, että haluat poistaa mykistyksen tililtä %s</string>
<string name="do_unmute">Poista mykistys</string>
<string name="confirm_block_title">Estä tili</string>
<string name="confirm_block_domain_title">Estä verkkotunnus</string>
<string name="confirm_block">Vahvista käyttäjän %s esto</string>
<string name="do_block">Estä</string>
<string name="confirm_unblock_title">Poista tilin esto</string>
<string name="confirm_unblock_domain_title">Poista verkkotunnuksen esto</string>
<string name="confirm_unblock">Vahvista, että haluat poistaa tilin %s eston</string>
<string name="do_unblock">Poista esto</string>
<string name="button_blocked">Estetty</string>
<string name="action_vote">Äänestä</string>
<string name="delete">Poista</string>
<string name="confirm_delete_title">Poista julkaisu</string>
<string name="confirm_delete">Haluatko varmasti poistaa tämän julkaisun?</string>
<string name="deleting">Poistetaan…</string>
<string name="notification_channel_audio_player">Äänen toisto</string>
<string name="play">Toista</string>
<string name="pause">Tauko</string>
<string name="log_out">Kirjaudu ulos</string>
<string name="add_account">Lisää tili</string>
<string name="search_hint">Haku</string>
<string name="hashtags">Aihetunnisteet</string>
<string name="news">Uutiset</string>
<string name="for_you">Sinulle</string>
<string name="all_notifications">Kaikki</string>
<string name="mentions">Maininnat</string>
<plurals name="x_people_talking">
<item quantity="one">%d henkilö puhuu</item>
<item quantity="other">%d henkilöä puhuu</item>
</plurals>
<string name="report_title">Raportoi %s</string>
<string name="report_choose_reason">Mikä on väärin tässä julkaisussa?</string>
<string name="report_choose_reason_account">Mikä on vialla käyttäjässä %s?</string>
<string name="report_choose_reason_subtitle">Valitse se, mikä sopii parhaiten</string>
<string name="report_reason_personal">En pidä siitä</string>
<string name="report_reason_personal_subtitle">Tätä ei halua nähdä</string>
<string name="report_reason_spam">Se on roskapostia</string>
<string name="report_reason_spam_subtitle">Haitalliset linkit, väärennetyt sitoutumiset tai toistuvat vastaukset</string>
<string name="report_reason_violation">Se rikkoo palvelimen sääntöjä</string>
<string name="report_reason_violation_subtitle">Tiedät, että se rikkoo tiettyjä sääntöjä</string>
<string name="report_reason_other">Jotain muuta</string>
<string name="report_reason_other_subtitle">Ongelma ei sovi muihin kategorioihin</string>
<string name="report_choose_rule">Mitä sääntöjä rikotaan?</string>
<string name="report_choose_rule_subtitle">Valitse kaikki sopivat</string>
<string name="report_choose_posts">Onko julkaisuja, jotka tukevat tätä raporttia?</string>
<string name="report_choose_posts_subtitle">Valitse kaikki sopivat</string>
<string name="report_comment_title">Olisiko jotain muuta, mitä meidän pitäisi tietää?</string>
<string name="report_comment_hint">Lisäkommentit</string>
<string name="sending_report">Lähetetään raporttia…</string>
<string name="report_sent_title">Kiitos raportista, tutkimme asiaa.</string>
<string name="report_sent_subtitle">Sillä välin kun tarkistamme tätä, voit ryhtyä toimenpiteisiin käyttäjää @%s vastaan:</string>
<string name="unfollow_user">Lopeta käyttäjän %s seuraaminen</string>
<string name="unfollow">Lopeta seuraaminen</string>
<string name="mute_user_explain">Et näe hänen viestejään. Hän voi silti seurata sinua ja nähdä viestisi. Hän ei tiedä, että on mykistetty.</string>
<string name="block_user_explain">Et näe hänen viestejään, eikä hän voi nähdä viestejäsi tai seurata sinua. Hän näkevät, että olet estänyt hänet.</string>
<string name="report_personal_title">Etkö halua nähdä tätä?</string>
<string name="report_personal_subtitle">Tässä on vaihtoehtosi hallita näkemääsi Mastodonissa:</string>
<string name="back">Takaisin</string>
<string name="search_communities">Palvelimen nimi tai URL-osoite</string>
<string name="instance_rules_title">Palvelimen säännöt</string>
<string name="instance_rules_subtitle">Jatkamalla sitoudut noudattamaan seuraavia sääntöjä, jotka %s moderaattorit ovat asettaneet ja valvoneet.</string>
<string name="signup_title">Luo tili</string>
<string name="display_name">Nimi</string>
<string name="username">Käyttäjätunnus</string>
<string name="email">Sähköposti</string>
<string name="password">Salasana</string>
<string name="confirm_password">Vahvista salasana</string>
<string name="password_note">Sisällytä suuraakkoset, erikoismerkit, ja numerot, jotta voit lisätä salasanan voimaa.</string>
<string name="category_academia">Akateeminen</string>
<string name="category_activism">Aktivismi</string>
<string name="category_all">Kaikki</string>
@@ -22,39 +176,424 @@
<string name="category_music">Musiikki</string>
<string name="category_regional">Alueellinen</string>
<string name="category_tech">Teknologia</string>
<string name="confirm_email_title">Tarkista sähköpostisi</string>
<!-- %s is the email address -->
<string name="confirm_email_subtitle">Napauta lähettämäämme linkkiä vahvistaaksesi tunnuksen %s. Odotamme täällä.</string>
<string name="confirm_email_didnt_get">Etkö saanut linkkiä?</string>
<string name="resend">Lähetä uudelleen</string>
<string name="open_email_app">Avaa sähköpostiohjelma</string>
<string name="resent_email">Vahvistusviesti lähetetty</string>
<string name="compose_hint">Kirjoita tai liitä mitä mietit</string>
<string name="content_warning">Sisältövaroitus</string>
<string name="save">Tallenna</string>
<string name="add_alt_text">Lisää selitys</string>
<string name="visibility_public">Julkinen</string>
<string name="visibility_followers_only">Vain seuraajat</string>
<string name="visibility_private">Vain mainitsemani tilit</string>
<string name="recent_searches">Viimeisimmät</string>
<string name="skip">Ohita</string>
<string name="notification_type_follow">Uudet seuraajat</string>
<string name="notification_type_favorite">Suosikit</string>
<string name="notification_type_reblog">Tehostukset</string>
<string name="notification_type_mention">Maininnat</string>
<string name="notification_type_poll">Kyselyt</string>
<string name="choose_account">Valitse tili</string>
<string name="err_not_logged_in">Kirjaudu ensin Mastodoniin</string>
<plurals name="cant_add_more_than_x_attachments">
<item quantity="one">Et voi lisätä enempää kuin %d medialiitteen</item>
<item quantity="other">Et voi lisätä enempää kuin %d medialiitettä</item>
</plurals>
<string name="media_attachment_unsupported_type">Tiedosto %s on tyyppiä jota ei tueta</string>
<string name="media_attachment_too_big">Tiedosto %1$s ylittää %2$s MB kokorajan</string>
<string name="settings_theme">Ulkoasu</string>
<string name="theme_auto">Käytä laitteen ulkoasua</string>
<string name="theme_light">Vaalea</string>
<string name="theme_dark">Tumma</string>
<string name="settings_behavior">Toiminnot</string>
<string name="settings_gif">Toista animoidut käyttäjäkuvat ja emojit</string>
<string name="settings_custom_tabs">Käytä sovelluksen sisäistä selainta</string>
<string name="settings_notifications">Ilmoitukset</string>
<string name="settings_contribute">Osallistu Mastodoniin</string>
<string name="settings_tos">Käyttöehdot</string>
<string name="settings_privacy_policy">Tietosuojakäytäntö</string>
<string name="settings_clear_cache">Tyhjennä median välimuisti</string>
<string name="settings_app_version">Mastodon Android v%1$s (%2$d)</string>
<string name="media_cache_cleared">Median välimuisti tyhjennetty</string>
<string name="confirm_log_out">Kirjaudu ulos %s?</string>
<string name="sensitive_content_explain">Kirjoittaja merkitsi tämän median arkaluontoiseksi.</string>
<string name="avatar_description">Avaa profiili %s</string>
<string name="more_options">Lisää asetuksia</string>
<string name="new_post">Uusi julkaisu</string>
<string name="button_reply">Vastaa</string>
<string name="button_reblog">Tehosta</string>
<string name="button_favorite">Suosikki</string>
<string name="button_share">Jaa</string>
<string name="media_no_description">Kuva ilma kuvausta</string>
<string name="add_media">Lisää mediatiedosto</string>
<string name="add_poll">Lisää kysely</string>
<string name="emoji">Emoji</string>
<string name="home_timeline">Kotiaikajana</string>
<string name="my_profile">Oma profiili</string>
<string name="media_viewer">Median katselin</string>
<string name="follow_user">Follow %s</string>
<string name="unfollowed_user">Käyttäjän %s seuraaminen lopetettu</string>
<string name="followed_user">Seuraat nyt käyttäjää %s</string>
<string name="following_user_requested">Käyttäjän %s seuraamista pyydetty</string>
<string name="open_in_browser">Avaa selaimessa</string>
<string name="hide_boosts_from_user">Piilota käyttäjän @%s tehostukset</string>
<string name="show_boosts_from_user">Näytä tehostukset käyttäjältä @%s</string>
<string name="signup_reason">Miksi haluat liittyä?</string>
<string name="signup_reason_note">Tämä auttaa meitä arvioimaan hakemustasi.</string>
<string name="clear">Tyhjennä</string>
<string name="profile_header">Otsikon kuva</string>
<string name="profile_picture">Profiilikuva</string>
<string name="reorder">Järjestä uudelleen</string>
<string name="download">Lataa</string>
<string name="permission_required">Käyttöoikeus vaaditaan</string>
<string name="storage_permission_to_download">Sovellus tarvitsee pääsyn tallennustilaan, jotta voit tallentaa tämän tiedoston.</string>
<string name="open_settings">Avaa asetukset</string>
<string name="error_saving_file">Virhe tallennettaessa tiedostoa</string>
<string name="file_saved">Tiedosto tallennettu</string>
<string name="downloading">Ladataan…</string>
<string name="no_app_to_handle_action">Tätä toimintoa käsittelevää sovellusta ei ole</string>
<string name="local_timeline">Paikallinen</string>
<string name="trending_posts_info_banner">Nämä julkaisut ovat saamassa vetoa eri puolilla Mastodonia.</string>
<string name="trending_links_info_banner">Näistä uutisista puhutaan Mastodonissa.</string>
<!-- %s is the server domain -->
<string name="local_timeline_info_banner">Nämä ovat viestit kaikilta palvelimesi (%s) käyttäjiltä.</string>
<string name="recommended_accounts_info_banner">Muiden seuraamiesi perusteella saattaisit pitää näistä tileistä.</string>
<string name="see_new_posts">Uusia julkaisuja</string>
<string name="load_missing_posts">Lataa puuttuvat julkaisut</string>
<string name="follow_back">Seuraa takaisin</string>
<string name="button_follow_pending">Pyydetty</string>
<string name="follows_you">Seuraa sinua</string>
<string name="manually_approves_followers">Hyväksyy seuraajat käsin</string>
<!-- translators: %,d is a valid placeholder, it formats the number with locale-dependent grouping separators -->
<plurals name="x_followers">
<item quantity="one">%d seuraaja</item>
<item quantity="other">%d seuraajaa</item>
</plurals>
<plurals name="x_following">
<item quantity="one">%d seurattu</item>
<item quantity="other">%d seurattua</item>
</plurals>
<plurals name="x_favorites">
<item quantity="one">%,d suosikki</item>
<item quantity="other">%,d suosikkia</item>
</plurals>
<plurals name="x_reblogs">
<item quantity="one">%,d tehostus</item>
<item quantity="other">%,d tehostusta</item>
</plurals>
<string name="timestamp_via_app">%1$s sovelluksella %2$s</string>
<string name="time_now">nyt</string>
<string name="edit_history">Muokkaushistoria</string>
<string name="last_edit_at_x">Muokattiin viimeksi %s</string>
<string name="time_just_now">juuri nyt</string>
<plurals name="x_seconds_ago">
<item quantity="one">%d sekunti sitten</item>
<item quantity="other">%d sekuntia sitten</item>
</plurals>
<plurals name="x_minutes_ago">
<item quantity="one">%d minuutti sitten</item>
<item quantity="other">%d minuuttia sitten</item>
</plurals>
<string name="edited_timestamp">muokattu %s</string>
<string name="edit_original_post">Alkuperäinen viesti</string>
<string name="edit_text_edited">Tekstiä muokattu</string>
<string name="edit_spoiler_added">Sisältövaroitus</string>
<string name="edit_spoiler_edited">Sisältövaroitus muokattu</string>
<string name="edit_spoiler_removed">Sisältövaroitus poistettu</string>
<string name="edit_poll_added">Kysely lisätty</string>
<string name="edit_poll_edited">Kyselyä muokattu</string>
<string name="edit_poll_removed">Kysely poistettu</string>
<string name="edit_media_added">Mediatiedosto lisätty</string>
<string name="edit_media_removed">Mediatiedosto poistettu</string>
<string name="edit_media_reordered">Mediatiedostoja järjestetty</string>
<string name="edit_marked_sensitive">Merkitty arkaluontoiseksi</string>
<string name="edit_marked_not_sensitive">Merkitty ei arkaluontoiseksi</string>
<string name="edit_multiple_changed">Julkaisu muokattu</string>
<string name="edit">Muokkaa</string>
<string name="discard_changes">Hylätäänkö muutokset?</string>
<string name="upload_failed">Lataus epäonnistui</string>
<string name="file_size_bytes">%d tavua</string>
<string name="file_size_kb">%.2f KB</string>
<string name="file_size_mb">%.2f MB</string>
<string name="file_size_gb">%.2f GB</string>
<string name="upload_processing">Käsitellään…</string>
<!-- %s is version like 1.2.3 -->
<!-- %s is version like 1.2.3 -->
<!-- %s is file size -->
<string name="download_update">Lataa (%s)</string>
<string name="install_update">Asenna</string>
<string name="privacy_policy_title">Yksityisyytesi</string>
<string name="privacy_policy_subtitle">Vaikka Mastodon-sovellus ei kerää mitään tietoja, palvelimella, jonka olet rekisteröitynyt, voi olla eri käytäntö.\n\nJos olet eri mieltä käytännöstä %s, voit palata ja valita eri palvelin.</string>
<string name="i_agree">Hyväksyn</string>
<string name="empty_list">Luettelo on tyhjä</string>
<string name="instance_signup_closed">Tämä palvelin ei hyväksy uusia rekisteröintejä.</string>
<string name="text_copied">Kopioitu leikepöydälle</string>
<string name="add_bookmark">Kirjanmerkki</string>
<string name="remove_bookmark">Poista kirjanmerkki</string>
<string name="bookmarks">Kirjanmerkit</string>
<string name="your_favorites">Omat suosikit</string>
<string name="login_title">Tervetuloa takaisin</string>
<string name="login_subtitle">Kirjaudu sisään palvelimella, jossa olet luonut tilisi.</string>
<string name="server_url">Palvelimen URL-osoite</string>
<string name="signup_random_server_explain">Palvelin valitaan kielesi perusteella, jos jatkat ilman valintaa.</string>
<string name="server_filter_any_language">Millä tahansa kielellä</string>
<string name="server_filter_instant_signup">Välitön rekisteröityminen</string>
<string name="server_filter_manual_review">Manuaalinen hyväksyntä</string>
<string name="server_filter_any_signup_speed">Mikä tahansa rekisteröintinopeus</string>
<string name="server_filter_region_europe">Eurooppa</string>
<string name="server_filter_region_north_america">Pohjois-Amerikka</string>
<string name="server_filter_region_south_america">Etelä-Amerikka</string>
<string name="server_filter_region_africa">Afrikka</string>
<string name="server_filter_region_asia">Aasia</string>
<string name="server_filter_region_oceania">Oseania</string>
<string name="not_accepting_new_members">Ei hyväksy uusia jäseniä</string>
<string name="category_special_interests">Erityiset Kiinnostukset</string>
<string name="signup_passwords_dont_match">Salasanat eivät täsmää</string>
<string name="pick_server_for_me">Valitse minulle</string>
<string name="profile_add_row">Lisää rivi</string>
<string name="profile_setup">Profiilin asetukset</string>
<string name="profile_setup_subtitle">Voit myös täyttää tämän myöhemmin Profiili-välilehdellä.</string>
<string name="profile_setup_explanation">Voit lisätä enintään neljä profiilikenttää joissa on mitä haluat. Sijainti, linkit, pronominit — taivas on rajana.</string>
<string name="popular_on_mastodon">Suosittua Mastodonissa</string>
<string name="follow_all">Seuraa kaikkia</string>
<string name="server_rules_disagree">Eri mieltä</string>
<string name="privacy_policy_explanation">TL;DR: Emme kerää tai käsittele mitään.</string>
<!-- %s is server domain -->
<string name="server_policy_disagree">Eri mieltä tästä %s</string>
<string name="profile_bio">Kuvaus</string>
<!-- Shown in a progress dialog when you tap "follow all" -->
<string name="sending_follows">Seurataan käyttäjiä…</string>
<!-- %1$s is server domain, %2$s is email domain. You can reorder these placeholders to fit your language better. -->
<string name="signup_email_domain_blocked">%1$s ei salli ilmoittautumisia osoitteesta %2$s. Kokeile toista osoitetta tai &lt;a&gt;valitse toinen palvelin&lt;/a&gt;.</string>
<string name="spoiler_show">Näytä joka tapauksessa</string>
<string name="spoiler_hide">Piilota uudelleen</string>
<string name="poll_multiple_choice">Valitse yksi tai useampi</string>
<string name="save_changes">Tallenna muutokset</string>
<string name="profile_featured">Suositellut</string>
<string name="profile_timeline">Aikajana</string>
<string name="view_all">Näytä kaikki</string>
<string name="profile_endorsed_accounts">Tilit</string>
<string name="verified_link">Vahvistettu linkki</string>
<string name="show">Näytä</string>
<string name="hide">Piilota</string>
<string name="join_default_server">Liity palvelimelle %s</string>
<string name="pick_server">Valitse toinen palvelin</string>
<string name="signup_or_login">tai</string>
<string name="learn_more">Lue lisää</string>
<string name="welcome_to_mastodon">Tervetuloa Mastodoniin</string>
<string name="welcome_paragraph1">Mastodon on hajautettu sosiaalinen verkosto, joka tarkoittaa sitä, ettei sitä hallitse mikään yksittäinen yritys. Se koostuu monista itsenäisesti ylläpidetyistä palvelimista, jotka on liitetty yhteen.</string>
<string name="what_are_servers">Mitä palvelimet ovat?</string>
<string name="welcome_paragraph2">Jokainen Mastodon tili isännöi palvelimella - kullakin on omat arvot, säännöt, &amp; ylläpitäjät. Riippumatta siitä, minkä valitset, voit seurata ja olla vuorovaikutuksessa ihmisten kanssa millä tahansa palvelimella.</string>
<string name="opening_link">Avataan linkki…</string>
<string name="link_not_supported">Tämä linkki ei ole tuettu sovelluksessa</string>
<string name="log_out_all_accounts">Kirjaudu ulos kaikista tileistä</string>
<string name="confirm_log_out_all_accounts">Kirjaudu ulos kaikista tileistä?</string>
<string name="retry">Yritä uudelleen</string>
<string name="post_failed">Viestin lähettäminen epäonnistui</string>
<!-- %s is formatted file size ("467 KB image") -->
<string name="attachment_description_image">%s kuva</string>
<string name="attachment_description_video">%s video</string>
<string name="attachment_description_audio">%s ääni</string>
<string name="attachment_description_unknown">%s tiedosto</string>
<string name="attachment_type_image">Kuva</string>
<string name="attachment_type_video">Video</string>
<string name="attachment_type_audio">Ääni</string>
<string name="attachment_type_gif">GIF</string>
<string name="attachment_type_unknown">Tiedosto</string>
<string name="attachment_x_percent_uploaded">%d%% ladattu</string>
<string name="add_poll_option">Lisää kyselyyn vaihtoehto</string>
<string name="poll_length">Kyselyn kesto</string>
<string name="poll_style">Tyyli</string>
<string name="compose_poll_single_choice">Valitse yksi</string>
<string name="compose_poll_multiple_choice">Monivalinta</string>
<string name="delete_poll_option">Poista kyselyn vaihtoehto</string>
<string name="poll_style_title">Kyselyn tyyli</string>
<string name="alt_text">Selitys</string>
<string name="help">Ohje</string>
<string name="what_is_alt_text">Mikä on selitys?</string>
<string name="alt_text_help">Kuvaselitys auttaa ihmisiä, joilla on näkövamma, hidas yhteys, tai jotka tarvitsevat lisäkontekstia. \n\nVoit parantaa saavutettavuutta ja kaikkien mahdollisuutta ymmärtää kirjoittamalla selkeän, lyhyen ja objektiivisen selityksen. \n\n<ul><li>Mainitse tärkeät elementit</li>\n<li>Anna tiivistelmä kuvissa olevista teksteistä</li>\n<li>Käytä normaalia lauserakennetta</li>\n<li>Vältä turhaa toistoa</li>\n<li>Keskity monimutkaisissa kuvioissa (kuten kartoissa ja taulukoissa) trendeihin ja tärkeimpiin tietoihin</li></ul></string>
<string name="edit_post">Muokkaa julkaisua</string>
<string name="no_verified_link">Ei todennettua linkkiä</string>
<string name="compose_autocomplete_emoji_empty">Selaa emojeita</string>
<string name="compose_autocomplete_users_empty">Löydä etsimäsi henkilöt</string>
<string name="no_search_results">Näille hakusanoille ei löytynyt mitään</string>
<string name="language">Kieli</string>
<string name="language_default">Oletus</string>
<string name="language_system">Järjestelmä</string>
<string name="language_detecting">Tunnista kieli</string>
<string name="language_cant_detect">Ei voi tunnistaa kieltä</string>
<string name="language_detected">Tunnistettu</string>
<string name="media_hidden">Media piilotettu</string>
<string name="post_hidden">Julkaisu piilotettu</string>
<string name="report_title_post">Raportoi julkaisu</string>
<string name="forward_report_explanation">Tämä tili on toisella palvelimella. Haluatko lähettää nimettömän raportin myös sinne?</string>
<!-- %s is the server domain -->
<string name="forward_report_to_server">Välitä kohteeseen %s</string>
<!-- Shown on the "stamp" on the screen that appears after you report a post/user. Please keep the translation short, preferably a single word -->
<string name="reported">Raportoitu</string>
<string name="report_unfollow_explanation">Jos et enää halua nähdä tämän käyttäjän julkaisuja kotiaikajanallasi, lopeta seuraaminen.</string>
<string name="muted_user">Käyttäjä %s mykistetty</string>
<string name="report_sent_already_blocked">Olet jo estänyt tämän käyttäjän, sinun ei tarvitse tehdä muuta sillä aikaa kun tarkastamme raporttisi.</string>
<string name="report_personal_already_blocked">Olet jo estänyt tämän käyttäjän, joten sinun ei tarvitse tehdä mitään muuta.\n\nKiitos, että autat pitämään Mastodonin turvallisena paikkana kaikille!</string>
<string name="blocked_user">Estetty %s</string>
<string name="mark_all_notifications_read">Merkitse kaikki luetuksi</string>
<string name="settings_display">Näyttö</string>
<string name="settings_filters">Suodattimet</string>
<string name="settings_server_explanation">Yleiskatsaus, säännöt, valvojat</string>
<!-- %s is the app name (Mastodon, key app_name). I made it a placeholder so everything Just Works™ with forks -->
<string name="about_app">Tietoa: %s</string>
<string name="default_post_language">Julkaisun oletuskieli</string>
<string name="settings_alt_text_reminders">Lisää muistutus kuvaselityksestä</string>
<string name="settings_confirm_unfollow">Kysy ennen kuin käyttäjän seuraaminen lopetetaan</string>
<string name="settings_confirm_boost">Kysy ennen tehostusta</string>
<string name="settings_confirm_delete_post">Kysy ennen julkaisujen poistamista</string>
<string name="pause_all_notifications">Keskeytä kaikki</string>
<string name="pause_notifications_off">Pois Päältä</string>
<string name="notifications_policy_anyone">Kuka tahansa</string>
<string name="notifications_policy_followed">Seuraajasi</string>
<string name="notifications_policy_follower">Seuraamasi henkilöt</string>
<string name="notifications_policy_no_one">Ei kukaan</string>
<string name="settings_notifications_policy">Ota vastaan ilmoituksia käyttäjältä</string>
<string name="notification_type_mentions_and_replies">Maininnat ja vastaukset</string>
<string name="pause_all_notifications_title">Keskeytä kaikki ilmoitukset</string>
<plurals name="x_weeks">
<item quantity="one">%d viikko</item>
<item quantity="other">%d viikkoa</item>
</plurals>
<!-- %1$s is the date (may be relative, e.g. "today" or "yesterday"), %2$s is the time. You can reorder these placeholders if that works better for your language -->
<string name="date_at_time">%1$s klo %2$s</string>
<string name="today">tänään</string>
<string name="yesterday">eilen</string>
<string name="tomorrow">huomenna</string>
<!-- %s is the timestamp ("tomorrow at 12:34") -->
<string name="pause_notifications_ends">Päättyy %s</string>
<!-- %s is the timestamp ("tomorrow at 12:34") -->
<string name="pause_notifications_banner">Ilmoitukset jatkuvat %s.</string>
<string name="resume_notifications_now">Jatka nyt</string>
<string name="open_system_notification_settings">Siirry ilmoitusasetuksiin</string>
<string name="about_server">Tietoja</string>
<string name="server_rules">Säännöt</string>
<string name="server_administrator">Ylläpitäjä</string>
<string name="send_email_to_server_admin">Viestin ylläpitäjä</string>
<string name="notifications_disabled_in_system">Ota ilmoitukset käyttöön laitteesi asetuksista nähdäksesi päivityksiä mistä tahansa.</string>
<string name="settings_even_more">Vielä enemmän asetuksia</string>
<string name="settings_show_cws">Näytä sisältövaroitukset</string>
<string name="settings_hide_sensitive_media">Piilota arkaluontoiseksi merkitty media</string>
<string name="settings_show_interaction_counts">Näytä reaktiolaskurit</string>
<string name="settings_show_emoji_in_names">Mukautetut emojit näyttönimissä</string>
<plurals name="in_x_seconds">
<item quantity="one">%d sekunnin kuluttua</item>
<item quantity="other">%d sekunnin kuluttua</item>
</plurals>
<plurals name="in_x_minutes">
<item quantity="one">%d minuutin kuluttua</item>
<item quantity="other">%d minuutin kuluttua</item>
</plurals>
<plurals name="in_x_hours">
<item quantity="one">%d tunnin kuluttua</item>
<item quantity="other">%d tunnin kuluttua</item>
</plurals>
<plurals name="x_hours_ago">
<item quantity="one">%d tunti sitten</item>
<item quantity="other">%d tuntia sitten</item>
</plurals>
<string name="alt_text_reminder_title">Mediasta puuttuu selitysteksti</string>
<plurals name="alt_text_reminder_x_images">
<item quantity="one">%s kuvastasi puuttuu selitysteksti. Julkaistaanko silti?</item>
<item quantity="other">%s kuvastasi puuttuu selitysteksti. Julkaistaanko silti?</item>
</plurals>
<plurals name="alt_text_reminder_x_attachments">
<item quantity="one">%s mediatiedostostasi puuttuu selitysteksti. Julkaistaanko silti?</item>
<item quantity="other">%s mediatiedostostasi puuttuu selitysteksti. Julkaistaanko silti?</item>
</plurals>
<string name="count_one">Yksi</string>
<string name="count_two">Kaksi</string>
<string name="count_three">Kolme</string>
<string name="count_four">Neljä</string>
<string name="alt_text_reminder_post_anyway">Julkaise</string>
<!-- %s is the username -->
<string name="unfollow_confirmation">Lopeta käyttäjän %s seuraaminen?</string>
<string name="filter_active">Aktiivinen</string>
<string name="filter_inactive">Ei käytössä</string>
<string name="settings_add_filter">Lisää suodatin</string>
<string name="settings_edit_filter">Muokkaa suodatinta</string>
<string name="settings_filter_duration">Kesto</string>
<string name="settings_filter_muted_words">Mykistetyt sanat</string>
<string name="settings_filter_context">Mykistä alkaen</string>
<string name="settings_filter_show_cw">Näytä sisältövaroituksella</string>
<string name="settings_filter_show_cw_explanation">Näytä vielä viestejä, jotka täsmäävät tähän suodattimeen, mutta sisällönvaroituksen takana</string>
<string name="settings_delete_filter">Poista suodatin</string>
<string name="filter_duration_forever">Ikuisesti</string>
<!-- %s is the timestamp ("tomorrow at 12:34") -->
<string name="settings_filter_ends">Päättyy %s</string>
<plurals name="settings_x_muted_words">
<item quantity="one">%d mykistetty sana tai lause</item>
<item quantity="other">%d mykistettyä sanaa tai lauseita</item>
</plurals>
<string name="selection_2_options">%1$s ja %2$s</string>
<string name="selection_3_options">%1$s, %2$s ja %3$s</string>
<string name="selection_4_or_more">%1$s, %2$s, ja %3$d lisää</string>
<string name="filter_context_home_lists">Koti &amp; listat</string>
<string name="filter_context_notifications">Ilmoitukset</string>
<string name="filter_context_public_timelines">Julkiset aikajanat</string>
<string name="filter_context_threads_replies">Langat &amp; vastaukset</string>
<string name="filter_context_profiles">Profiilit</string>
<string name="settings_filter_title">Otsikko</string>
<string name="settings_delete_filter_title">Poistetaanko suodatin “%s”?</string>
<string name="settings_delete_filter_confirmation">Tämä suodatin poistetaan tililtäsi kaikissa laitteissa.</string>
<string name="add_muted_word">Lisää mykistetty sana</string>
<string name="edit_muted_word">Muokkaa mykistettyä sanaa</string>
<string name="add">Lisää</string>
<string name="filter_word_or_phrase">Sana tai lause</string>
<string name="filter_add_word_help">Sanat ovat tapauskohtaisia ja vastaavat vain kokonaisia sanoja.\n\nJos suodattaa avainsana “Apple”, se piilottaa viestit sisältävät “omena” tai “aPPLe” mutta ei “ananas\".</string>
<string name="settings_delete_filter_word">Poista sana “%s”?</string>
<string name="enter_selection_mode">Valitse</string>
<string name="select_all">Valitse kaikki</string>
<string name="settings_filter_duration_title">Suodattimen kesto</string>
<string name="filter_duration_custom">Mukautettu</string>
<plurals name="settings_delete_x_filter_words">
<item quantity="one">Poista %d sana?</item>
<item quantity="other">Poista %d sanaa?</item>
</plurals>
<plurals name="x_items_selected">
<item quantity="one">%d valittu</item>
<item quantity="other">%d valittu</item>
</plurals>
<string name="required_form_field_blank">Tätä ei voi jättää tyhjäksi</string>
<string name="filter_word_already_in_list">Jo luettelossa</string>
<string name="app_update_ready">Sovelluksen päivitys valmis</string>
<string name="app_update_version">Versio %s</string>
<string name="downloading_update">Ladataan (%d%%)</string>
<!-- Shown like a content warning, %s is the name of the filter -->
<string name="post_matches_filter_x">Sopii suodattimeen ”%s”</string>
<string name="search_mastodon">Etsi Mastodonista</string>
<string name="clear_all">Tyhjennä kaikki</string>
<string name="search_open_url">Avaa URL-osoite Mastodonissa</string>
<string name="posts_matching_hashtag">Julkaisut joissa on \"%s\"</string>
<string name="search_go_to_account">Siirry tiliin %s</string>
<string name="posts_matching_string">Julkaisut joissa on \"%s\"</string>
<string name="accounts_matching_string">Henkilöt jossa on \"%s\"</string>
<!-- Shown in the post header. Please keep it short -->
<string name="time_seconds_ago_short">%ds sitten</string>
<string name="time_minutes_ago_short">%dm sitten</string>
<string name="time_hours_ago_short">%dh sitten</string>
<string name="time_days_ago_short">%dd sitten</string>
<!-- %s is the name of the post language -->
<string name="translate_post">Käännetty kielestä %s</string>
<!-- %1$s is the language, %2$s is the name of the translation service -->
<string name="post_translated">Käännetty kielestä %1$s käyttäen %2$s</string>
<string name="translation_show_original">Näytä alkuperäinen</string>
<string name="translation_failed">Käännös epäonnistui. Ehkä järjestelmänvalvoja ei ole ottanut käyttöön käännöksiä tällä palvelimella tai tällä palvelimella on käynnissä vanhempi versio Mastodonista, jossa käännöksiä ei vielä tueta.</string>
<plurals name="x_participants">
<item quantity="one">%d osallistuja</item>
<item quantity="other">%d osallistujaa</item>
</plurals>
<plurals name="x_posts_today">
<item quantity="one">%,d viesti tänään</item>
<item quantity="other">%,d viestiä tänään</item>
</plurals>
</resources>

View File

@@ -211,12 +211,12 @@
<item quantity="other">%,d tagasunod</item>
</plurals>
<plurals name="x_following">
<item quantity="one">%, d Sumusunod</item>
<item quantity="other">%, d Sumusunod</item>
<item quantity="one">%,d Sumusunod</item>
<item quantity="other">%,d Sumusunod</item>
</plurals>
<plurals name="x_favorites">
<item quantity="one">%, d Paborito</item>
<item quantity="other">%, d paborito</item>
<item quantity="one">%,d Paborito</item>
<item quantity="other">%,d paborito</item>
</plurals>
<string name="timestamp_via_app">%1$s sa pamamagitan ng %2$s</string>
<string name="time_now">ngayon</string>
@@ -284,4 +284,6 @@
<!-- %s is the timestamp ("tomorrow at 12:34") -->
<!-- Shown like a content warning, %s is the name of the filter -->
<!-- Shown in the post header. Please keep it short -->
<!-- %s is the name of the post language -->
<!-- %1$s is the language, %2$s is the name of the translation service -->
</resources>

View File

@@ -387,7 +387,7 @@
<string name="welcome_to_mastodon">Bienvenue sur Mastodon</string>
<string name="welcome_paragraph1">Mastodon est un réseau social décentralisé, ce qui signifie quaucune entreprise ne le contrôle. Il est composé de plusieurs serveurs indépendants, tous connectés ensemble.</string>
<string name="what_are_servers">Que sont les serveurs ?</string>
<string name="welcome_paragraph2"><![CDATA[Chaque compte Mastodon est hébergé sur un serveur, chacun ayant ses valeurs, ses règles, et ses administratrices ou administrateurs. Quel que soit le serveur que vous choisissez, vous pouvez suivre et interagir avec des personnes sur n\'importe quel serveur.]]></string>
<string name="welcome_paragraph2">Chaque compte Mastodon est hébergé sur un serveur, chacun ayant ses valeurs, ses règles, et ses administratrices ou administrateurs. Quel que soit le serveur que vous choisissez, vous pouvez suivre et interagir avec des personnes sur n\'importe quel autre serveur.</string>
<string name="opening_link">Ouverture du lien…</string>
<string name="link_not_supported">Ce lien nest pas pris en charge dans lapplication</string>
<string name="log_out_all_accounts">Se déconnecter de tous les comptes</string>
@@ -582,4 +582,18 @@
<string name="time_minutes_ago_short">il y a %dm</string>
<string name="time_hours_ago_short">Il y a %dh</string>
<string name="time_days_ago_short">Il y a %dj</string>
<!-- %s is the name of the post language -->
<string name="translate_post">Traduire depuis %s</string>
<!-- %1$s is the language, %2$s is the name of the translation service -->
<string name="post_translated">Traduit depuis %1$s via %2$s</string>
<string name="translation_show_original">Afficher loriginal</string>
<string name="translation_failed">La traduction a échoué. Peut-être que ladministrateur na pas activé les traductions sur ce serveur ou que ce serveur utilise une ancienne version de Mastodon où les traductions ne sont pas encore prises en charge.</string>
<plurals name="x_participants">
<item quantity="one">%,d participant</item>
<item quantity="other">%,d participants</item>
</plurals>
<plurals name="x_posts_today">
<item quantity="one">%,d message aujourdhui</item>
<item quantity="other">%,d messages aujourdhui</item>
</plurals>
</resources>

View File

@@ -20,4 +20,6 @@
<!-- %s is the timestamp ("tomorrow at 12:34") -->
<!-- Shown like a content warning, %s is the name of the filter -->
<!-- Shown in the post header. Please keep it short -->
<!-- %s is the name of the post language -->
<!-- %1$s is the language, %2$s is the name of the translation service -->
</resources>

View File

@@ -425,7 +425,7 @@
<string name="welcome_to_mastodon">Fàilte gu Mastodon</string>
<string name="welcome_paragraph1">S e lìonra sòisealta sgaoilte a th ann am Mastodon agus is ciall dha seo nach eil e fo smachd aon chompanaidh a-mhàin. Tha e dèanta de ghrunn fhrithealaichean a tha gan ruith gu neo-eisimeileach ach ceangailte ri chèile.</string>
<string name="what_are_servers">Dè th anns na frithealaichean?</string>
<string name="welcome_paragraph2"><![CDATA[Tha gach cunntas Mastodon ga òstadh air frithealaiche tha luachan, riaghailtean ⁊ rianairean sònraichte aig gach fear. Ge b e dè am frithealaiche a thaghas tu, s urrainn dhut daoine air frithealaiche sam bith a leantainn is bruidhinn riutha.]]></string>
<string name="welcome_paragraph2">Tha gach cunntas Mastodon ga òstadh air frithealaiche tha luachan, riaghailtean ⁊ rianairean sònraichte aig gach fear. Ge b e dè am frithealaiche a thaghas tu, s urrainn dhut daoine air frithealaiche sam bith a leantainn is bruidhinn riutha.</string>
<string name="opening_link">A fosgladh a cheangail…</string>
<string name="link_not_supported">Cha chuir an aplacaid taic ris a cheangal seo</string>
<string name="log_out_all_accounts">Clàraich a-mach às a h-uile cunntas</string>
@@ -640,4 +640,6 @@
<string name="time_minutes_ago_short">%dm air ais</string>
<string name="time_hours_ago_short">%du air ais</string>
<string name="time_days_ago_short">%dl air ais</string>
<!-- %s is the name of the post language -->
<!-- %1$s is the language, %2$s is the name of the translation service -->
</resources>

View File

@@ -4,12 +4,14 @@
<string name="next">Seguinte</string>
<string name="loading_instance">Obtendo info do servidor…</string>
<string name="error">Erro</string>
<string name="not_a_mastodon_instance">%s non semella ser un servidor Mastodon.</string>
<string name="ok">OK</string>
<string name="preparing_auth">Preparándose para a autenticación…</string>
<string name="finishing_auth">Rematando coa autenticación…</string>
<string name="user_boosted">%s promoveu</string>
<string name="in_reply_to">Como resposta a %s</string>
<string name="notifications">Notificacións</string>
<string name="user_followed_you">%s comezou a seguirte</string>
<string name="share_toot_title">Compartir</string>
<string name="settings">Axustes</string>
<string name="publish">Publicar</string>
@@ -336,7 +338,6 @@
<string name="welcome_to_mastodon">Benvida a Mastodon</string>
<string name="welcome_paragraph1">Mastodon é unha rede social descentralizada, onde ningunha empresa ten o control. Está formada por moitos servidores independentes comunicándose entre si.</string>
<string name="what_are_servers">Que son os servidores?</string>
<string name="welcome_paragraph2"><![CDATA[Cada conta Mastodon está hospedada nun servidor — cada unha coas súas regras, valores e admins. Non importa cal elixas, podes seguir e interactuar con persoas de outros servidores.]]></string>
<!-- %s is formatted file size ("467 KB image") -->
<!-- %s is the server domain -->
<!-- Shown on the "stamp" on the screen that appears after you report a post/user. Please keep the translation short, preferably a single word -->
@@ -348,4 +349,6 @@
<!-- %s is the timestamp ("tomorrow at 12:34") -->
<!-- Shown like a content warning, %s is the name of the filter -->
<!-- Shown in the post header. Please keep it short -->
<!-- %s is the name of the post language -->
<!-- %1$s is the language, %2$s is the name of the translation service -->
</resources>

View File

@@ -47,4 +47,6 @@
<!-- %s is the timestamp ("tomorrow at 12:34") -->
<!-- Shown like a content warning, %s is the name of the filter -->
<!-- Shown in the post header. Please keep it short -->
<!-- %s is the name of the post language -->
<!-- %1$s is the language, %2$s is the name of the translation service -->
</resources>

View File

@@ -227,4 +227,6 @@
<!-- %s is the timestamp ("tomorrow at 12:34") -->
<!-- Shown like a content warning, %s is the name of the filter -->
<!-- Shown in the post header. Please keep it short -->
<!-- %s is the name of the post language -->
<!-- %1$s is the language, %2$s is the name of the translation service -->
</resources>

View File

@@ -372,4 +372,6 @@
<!-- %s is the timestamp ("tomorrow at 12:34") -->
<!-- Shown like a content warning, %s is the name of the filter -->
<!-- Shown in the post header. Please keep it short -->
<!-- %s is the name of the post language -->
<!-- %1$s is the language, %2$s is the name of the translation service -->
</resources>

View File

@@ -303,7 +303,6 @@
<string name="welcome_to_mastodon">Բարի գալուստ Մաստոդոն</string>
<string name="welcome_paragraph1">Մաստոդոնը ապակենտրոնացված սոցցանց է, այսինքն՝ այն չի պատկանում մի ընկերության։ Այն բաղկացած է բազմաթիվ անկախ և կապակցված սերվերներից։</string>
<string name="what_are_servers">Ի՞նչ է սերվերը։</string>
<string name="welcome_paragraph2"><![CDATA[Մաստոդոնի որևէ հաշիվ գտնվում է սերվերի վրա - ամեն մեկը՝ իր արժեքներով, կանոններով և ադմիններով։ Դուք կարող եք հետևել և շփվել որևէ սերվերի մարդկանց հետ՝ անկախ ձեր ընտրությունից։]]></string>
<string name="retry">Կրկին</string>
<!-- %s is formatted file size ("467 KB image") -->
<string name="alt_text">Բացատրություն</string>
@@ -383,4 +382,6 @@
<!-- %s is the timestamp ("tomorrow at 12:34") -->
<!-- Shown like a content warning, %s is the name of the filter -->
<!-- Shown in the post header. Please keep it short -->
<!-- %s is the name of the post language -->
<!-- %1$s is the language, %2$s is the name of the translation service -->
</resources>

View File

@@ -20,4 +20,6 @@
<!-- %s is the timestamp ("tomorrow at 12:34") -->
<!-- Shown like a content warning, %s is the name of the filter -->
<!-- Shown in the post header. Please keep it short -->
<!-- %s is the name of the post language -->
<!-- %1$s is the language, %2$s is the name of the translation service -->
</resources>

View File

@@ -368,7 +368,7 @@
<string name="welcome_to_mastodon">Selamat datang di Mastodon</string>
<string name="welcome_paragraph1">Mastodon adalah jejaring sosial terdesentralisasi, tidak ada satu pun perusahaan yang mengontrol. Semua dijalankan oleh server independen, terkoneksi bersama.</string>
<string name="what_are_servers">Apa itu server?</string>
<string name="welcome_paragraph2"><![CDATA[Semua akun Mastodon berada pada sebuah server — dengan nilai, aturan, dan admin masing-masing. Mana pun yang kamu pilih, kamu bisa mengikuti dan berinteraksi dengan server mana pun.]]></string>
<string name="welcome_paragraph2">Semua akun Mastodon berada pada sebuah server — dengan nilai, aturan, &amp; admin masing-masing. Mana pun yang Anda pilih, Anda dapat mengikuti dan berinteraksi dengan server mana pun.</string>
<string name="opening_link">Membuka tautan…</string>
<string name="link_not_supported">Tautan ini tidak didukung dalam aplikasi</string>
<string name="log_out_all_accounts">Keluar dari semua akun</string>
@@ -553,4 +553,6 @@
<string name="time_minutes_ago_short">%dm yang lalu</string>
<string name="time_hours_ago_short">%dj yang lalu</string>
<string name="time_days_ago_short">%dh yang lalu</string>
<!-- %s is the name of the post language -->
<!-- %1$s is the language, %2$s is the name of the translation service -->
</resources>

View File

@@ -387,7 +387,7 @@
<string name="welcome_to_mastodon">Velkomin í Mastodon</string>
<string name="welcome_paragraph1">Mastodon er dreyfhýst samfélagsnet, sem þýðir að ekkert eitt fyrirtæki ræður yfir því. Netið samanstendur af mörgum sjálfstætt reknum netþjónum sem tengjast innbyrðis.</string>
<string name="what_are_servers">Hvað eru netþjónar?</string>
<string name="welcome_paragraph2"><![CDATA[Hver einasti Mastodon-aðgangur er hýstur á sínum netþjóni — hver slíkur er með sín eigin gildi, reglur og stjórnendur. Það skiftir ekki máli hvern þeirra þú velur, þú getur fylgst fylgst með og átt í samskiptum við fólk á hvaða netþjóni sem er.]]></string>
<string name="welcome_paragraph2">Hver einasti Mastodon-aðgangur er hýstur á sínum netþjóni — hver slíkur er með sín eigin gildi, reglur og stjórnendur. Það skiftir ekki máli hvern þeirra þú velur, þú getur fylgst fylgst með og átt í samskiptum við fólk á hvaða netþjóni sem er.</string>
<string name="opening_link">Opna tengil…</string>
<string name="link_not_supported">Það er ekki stuðningur við tengilinn í forritinu</string>
<string name="log_out_all_accounts">Skrá út úr öllum aðgöngum</string>
@@ -582,4 +582,21 @@
<string name="time_minutes_ago_short">fyrir %dm síðan</string>
<string name="time_hours_ago_short">fyrir %dh síðan</string>
<string name="time_days_ago_short">fyrir %dd síðan</string>
<!-- %s is the name of the post language -->
<string name="translate_post">Þýða úr %s</string>
<!-- %1$s is the language, %2$s is the name of the translation service -->
<string name="post_translated">Þýtt úr %1$s með %2$s</string>
<string name="translation_show_original">Sýna upprunalegt</string>
<string name="translation_failed">Þýðing mistókst. Mögulega hefur kerfisstjórinn ekki virkjað þýðingar á þessum netþjóni, eða að netþjónninn sé keyrður á eldri útgáfu Mastodon þar sem þýðingar séu ekki studdar.</string>
<string name="settings_privacy">Gagnaleynd og útbreiðsla</string>
<string name="settings_discoverable">Hafa notandasnið og færslur með í reikniritum leitar</string>
<string name="settings_indexable">Hafa opinberar færslur með í leitarniðurstöðum</string>
<plurals name="x_participants">
<item quantity="one">%,d þátttakandi</item>
<item quantity="other">%,d þátttakendur</item>
</plurals>
<plurals name="x_posts_today">
<item quantity="one">%,d færsla í dag</item>
<item quantity="other">%,d færslur í dag</item>
</plurals>
</resources>

View File

@@ -387,7 +387,7 @@
<string name="welcome_to_mastodon">Benvenuto/a su Mastodon</string>
<string name="welcome_paragraph1">Mastodon è un social network decentralizzato, il che significa che nessuna singola azienda lo controlla. È composto da molti server indipendenti e tutti connessi insieme.</string>
<string name="what_are_servers">Cosa sono i server?</string>
<string name="welcome_paragraph2"><![CDATA[Ogni account Mastodon è ospitato su un server — ognuno con i propri valori, regole, e amministratori. Non importa quale scegliere, è possibile seguire e interagire con le persone su qualsiasi server.]]></string>
<string name="welcome_paragraph2">Ogni account Mastodon è ospitato su un server — ognuno con i propri valori, regole, &amp; amministratori. Non importa quale scegliere, è possibile seguire e interagire con persone su altri server.</string>
<string name="opening_link">Apertura del collegamento…</string>
<string name="link_not_supported">Questo collegamento non è supportato nell\'app</string>
<string name="log_out_all_accounts">Esci da tutti gli account</string>
@@ -582,4 +582,19 @@
<string name="time_minutes_ago_short">%dmin fa</string>
<string name="time_hours_ago_short">%do fa</string>
<string name="time_days_ago_short">%dg fa</string>
<!-- %s is the name of the post language -->
<string name="translate_post">Traduci da %s</string>
<!-- %1$s is the language, %2$s is the name of the translation service -->
<string name="post_translated">Tradotto da %1$s utilizzando %2$s</string>
<string name="translation_show_original">Mostra originale</string>
<string name="translation_failed">Traduzione fallita. Forse l\'amministratore non ha abilitato le traduzioni su questo server, o su questo server è in esecuzione una versione precedente di Mastodon in cui le traduzioni non sono ancora supportate.</string>
<string name="settings_indexable">Includi i post pubblici nei risultati di ricerca</string>
<plurals name="x_participants">
<item quantity="one">%,d participante</item>
<item quantity="other">%,d partecipanti</item>
</plurals>
<plurals name="x_posts_today">
<item quantity="one">%,d post oggi</item>
<item quantity="other">%,d post oggi</item>
</plurals>
</resources>

View File

@@ -88,4 +88,6 @@
<!-- %s is the timestamp ("tomorrow at 12:34") -->
<!-- Shown like a content warning, %s is the name of the filter -->
<!-- Shown in the post header. Please keep it short -->
<!-- %s is the name of the post language -->
<!-- %1$s is the language, %2$s is the name of the translation service -->
</resources>

View File

@@ -36,13 +36,13 @@
<string name="button_following">フォロー中</string>
<string name="edit_profile">プロフィールを編集</string>
<string name="share_user">プロフィールを共有</string>
<string name="mute_user">%s さんをミュート</string>
<string name="unmute_user">%s さんのミュート解除</string>
<string name="block_user">%s さんをブロック</string>
<string name="unblock_user">%s さんのブロック解除</string>
<string name="report_user">%s さんを報告</string>
<string name="block_domain">%s をブロック</string>
<string name="unblock_domain">%s のブロック解除</string>
<string name="mute_user">ミュート: %s さん</string>
<string name="unmute_user">ミュート解除: %s さん</string>
<string name="block_user">ブロック: %s さん</string>
<string name="unblock_user">ブロック解除: %s さん</string>
<string name="report_user">報告: %s さん</string>
<string name="block_domain">ブロック: %s</string>
<string name="unblock_domain">ブロック解除: %s</string>
<plurals name="x_posts">
<item quantity="other">投稿 %,d 件</item>
</plurals>
@@ -134,7 +134,7 @@
<string name="sending_report">報告を送信しています...</string>
<string name="report_sent_title">ご報告ありがとうございます、追って確認します。</string>
<string name="report_sent_subtitle">私たちが確認する前でも、あなたが %s さんにできる対応があります。</string>
<string name="unfollow_user">%s さんのフォロー解除</string>
<string name="unfollow_user">フォロー解除: %s さん</string>
<string name="unfollow">フォローを解除</string>
<string name="mute_user_explain">ミュートすると、相手の投稿が表示されなくなります。相手は引き続きあなたをフォローしたり、あなたの投稿を表示したりできますが、ミュートしていることは伝わりません。</string>
<string name="block_user_explain">ブロックすると、相手の投稿が表示されなくなります。相手はあなたの投稿を見たり、フォローしたりできなくなります。相手にブロックしていることが伝わります。</string>
@@ -222,13 +222,13 @@
<string name="home_timeline">ホームタイムライン</string>
<string name="my_profile">プロフィール</string>
<string name="media_viewer">メディアビューアー</string>
<string name="follow_user">%s さんをフォロー</string>
<string name="follow_user">フォロー: %s さん</string>
<string name="unfollowed_user">%s さんのフォローを解除しました</string>
<string name="followed_user">%s さんをフォローしました</string>
<string name="following_user_requested">%s さんにフォローリクエストを送信しました</string>
<string name="open_in_browser">ブラウザーで開く</string>
<string name="hide_boosts_from_user">%s さんのブーストを非表示</string>
<string name="show_boosts_from_user">%s さんのブーストを表示</string>
<string name="hide_boosts_from_user">ブーストを非表示: %s さん</string>
<string name="show_boosts_from_user">ブーストを表示: %s さん</string>
<string name="signup_reason">参加したい理由を入力してください</string>
<string name="signup_reason_note">申請の確認に役立つメッセージを添えてください。</string>
<string name="clear">クリア</string>
@@ -368,7 +368,7 @@
<string name="welcome_to_mastodon">Mastodon とは</string>
<string name="welcome_paragraph1">Mastodon は、いち企業の統制に依存しない非中央集権型のソーシャルネットワークです。たくさんの独立したサーバーが相互につながり合い、ひとつのネットワークを形成しています。</string>
<string name="what_are_servers">サーバーとは</string>
<string name="welcome_paragraph2"><![CDATA[Mastodon のアカウントはいずれかのサーバーに所属します。それぞれのサーバーは異なる価値観やルールをもち、それらを管理する管理者がいます。どのサーバーにいても、ほかのあらゆるサーバーのユーザーをフォローして、かかわりをもつことができるでしょう。]]></string>
<string name="welcome_paragraph2">Mastodon のアカウントはいずれかのサーバーに所属します。それぞれのサーバーは異なる価値観やルールがあり、それらを管理する管理者がいます。どのサーバーにいても、のあらゆるサーバーのユーザーをフォローして、わりを持てるでしょう。</string>
<string name="opening_link">リンクを開いています…</string>
<string name="link_not_supported">アプリはこのリンクに対応していません</string>
<string name="log_out_all_accounts">すべてのアカウントをログアウト</string>
@@ -553,4 +553,19 @@
<string name="time_minutes_ago_short">%d 分前</string>
<string name="time_hours_ago_short">%d 時間前</string>
<string name="time_days_ago_short">%d 日前</string>
<!-- %s is the name of the post language -->
<string name="translate_post">%s から翻訳</string>
<!-- %1$s is the language, %2$s is the name of the translation service -->
<string name="post_translated">%2$s による %1$s からの翻訳</string>
<string name="translation_show_original">原文を表示</string>
<string name="translation_failed">翻訳に失敗しました。このサーバーは翻訳機能を有効にしていないか、翻訳機能のない旧バージョンの Mastodon を実行しているのかもしれません。</string>
<string name="settings_privacy">プライバシーとつながりやすさ</string>
<string name="settings_discoverable">アカウントを見つけやすくする</string>
<string name="settings_indexable">公開投稿を検索できるようにする</string>
<plurals name="x_participants">
<item quantity="other">参加者 %d 人</item>
</plurals>
<plurals name="x_posts_today">
<item quantity="other">今日の投稿 %,d 件</item>
</plurals>
</resources>

View File

@@ -242,4 +242,6 @@
<!-- %s is the timestamp ("tomorrow at 12:34") -->
<!-- Shown like a content warning, %s is the name of the filter -->
<!-- Shown in the post header. Please keep it short -->
<!-- %s is the name of the post language -->
<!-- %1$s is the language, %2$s is the name of the translation service -->
</resources>

View File

@@ -300,4 +300,6 @@
<!-- %s is the timestamp ("tomorrow at 12:34") -->
<!-- Shown like a content warning, %s is the name of the filter -->
<!-- Shown in the post header. Please keep it short -->
<!-- %s is the name of the post language -->
<!-- %1$s is the language, %2$s is the name of the translation service -->
</resources>

View File

@@ -180,4 +180,6 @@
<!-- %s is the timestamp ("tomorrow at 12:34") -->
<!-- Shown like a content warning, %s is the name of the filter -->
<!-- Shown in the post header. Please keep it short -->
<!-- %s is the name of the post language -->
<!-- %1$s is the language, %2$s is the name of the translation service -->
</resources>

View File

@@ -85,6 +85,10 @@
<item quantity="one">%d dag resterend</item>
<item quantity="other">%d dagen resterend</item>
</plurals>
<plurals name="x_votes">
<item quantity="one">%,d stem</item>
<item quantity="other">%,d stemmen</item>
</plurals>
<string name="poll_closed">Gesloten</string>
<string name="confirm_mute_title">Account negeren</string>
<string name="confirm_mute">Het negeren van %s bevestigen</string>
@@ -383,7 +387,7 @@
<string name="welcome_to_mastodon">Welkom bij Mastodon</string>
<string name="welcome_paragraph1">Mastodon is een gedecentraliseerd sociaal netwerk, wat betekent dat geen enkel bedrijf het controleert. Het bestaat uit veel onafhankelijk opererende servers, allemaal met elkaar verbonden.</string>
<string name="what_are_servers">Wat zijn servers?</string>
<string name="welcome_paragraph2"><![CDATA[Elk Mastodonaccount wordt op een server gehost - elk met diens eigen waarden, regels en beheerders. Het maakt niet uit welke server je kiest, je kunt mensen op elke server volgen en ermee communiceren.]]></string>
<string name="welcome_paragraph2">Elk Mastodon-account wordt gehost op een server elk met diens eigen waarden, regels en beheerders. Het maakt niet uit welke server je kiest, je kunt mensen op elke server volgen en ermee communiceren.</string>
<string name="opening_link">Koppeling aan het openen…</string>
<string name="link_not_supported">Deze koppeling wordt niet ondersteund in de app</string>
<string name="log_out_all_accounts">Bij alle accounts afmelden</string>
@@ -402,6 +406,7 @@
<string name="attachment_type_unknown">Bestand</string>
<string name="attachment_x_percent_uploaded">%d%% geüpload</string>
<string name="add_poll_option">Enquete-optie toevoegen</string>
<string name="poll_length">Lengte enquête</string>
<string name="poll_style">Stijl</string>
<string name="compose_poll_single_choice">Kies een</string>
<string name="compose_poll_multiple_choice">Meerkeuze</string>
@@ -410,9 +415,38 @@
<string name="alt_text">Alternatieve tekst</string>
<string name="help">Hulp</string>
<string name="what_is_alt_text">Wat is alternatieve tekst?</string>
<string name="alt_text_help">Alt tekst biedt afbeeldingsbeschrijvingen voor mensen met een visiuele beperking en verbindingen met een lage bandbreedte of voor mensen die naar extra context zoeken.\n\nJe kunt de toegankelijkheid en het begrip voor iedereen verbeteren door duidelijk, beknopt en objectief te schrijven.\n\n<ul><li>Beschrijf belangrijke elementen</li>\n<li>Vat tekst in afbeeldingen samen</li>\n<li>Gebruik de reguliere zinsopbouw</li>\n<li>Vermijd overbodige informatie</li>\n<li>Focus op trends en belangrijke bevindingen in complexe beelden (zoals diagrammen of kaarten)</li></ul> \n</string>
<string name="edit_post">Bericht bewerken</string>
<string name="no_verified_link">Geen geverifieerde koppeling</string>
<string name="compose_autocomplete_emoji_empty">Emoji doorzoeken</string>
<string name="compose_autocomplete_users_empty">Vind wie je zoekt</string>
<string name="no_search_results">Deze zoektermen leveren geen resultaat op</string>
<string name="language">Taal</string>
<string name="language_default">Standaard</string>
<string name="language_system">Systeem</string>
<string name="language_detecting">Taal detecteren</string>
<string name="language_cant_detect">Kan taal niet detecteren</string>
<string name="language_detected">Gedetecteerd</string>
<string name="media_hidden">Media verborgen</string>
<string name="post_hidden">Bericht verborgen</string>
<string name="report_title_post">Bericht rapporteren</string>
<string name="forward_report_explanation">De account bevindt zich op een andere server. Wil je daar eveneens een geanonimiseerde kopie van dit rapport naar toesturen?</string>
<!-- %s is the server domain -->
<string name="forward_report_to_server">Doorsturen naar %s</string>
<!-- Shown on the "stamp" on the screen that appears after you report a post/user. Please keep the translation short, preferably a single word -->
<string name="reported">Gerapporteerd</string>
<string name="report_unfollow_explanation">Als je hun berichten niet meer in je home feed wilt zien, moet je deze persoon niet meer volgen.</string>
<string name="muted_user">%s gedempt</string>
<string name="report_sent_already_blocked">Je hebt deze gebruiker al geblokkeerd, dus je hoeft niets meer te doen terwijl we je rapport beoordelen.</string>
<string name="report_personal_already_blocked">Je hebt deze gebruiker al geblokkeerd, dus er is niets anders dat je hoeft te doen.\n\nBedankt voor het helpen om Mastodon een veilige plek voor iedereen te behouden!</string>
<string name="blocked_user">%s geblokkeerd</string>
<string name="mark_all_notifications_read">Alles als gelezen markeren</string>
<string name="settings_display">Weergave</string>
<string name="settings_filters">Filters</string>
<string name="settings_server_explanation">Overzicht, regels, moderators</string>
<!-- %s is the app name (Mastodon, key app_name). I made it a placeholder so everything Just Works™ with forks -->
<string name="about_app">Over %s</string>
<string name="default_post_language">Standaard taal bericht</string>
<string name="settings_alt_text_reminders">Alt-tekst-herinneringen toevoegen</string>
<string name="settings_confirm_unfollow">Vraag voor ontvolgen iemand</string>
<string name="settings_confirm_boost">Vragen voor boosten</string>
@@ -438,6 +472,44 @@
<!-- %s is the timestamp ("tomorrow at 12:34") -->
<string name="pause_notifications_ends">Eindigt %s</string>
<!-- %s is the timestamp ("tomorrow at 12:34") -->
<string name="pause_notifications_banner">Notificaties worden hervat %s.</string>
<string name="resume_notifications_now">Nu hervatten</string>
<string name="open_system_notification_settings">Ga naar de meldingsinstellingen</string>
<string name="about_server">Over</string>
<string name="server_rules">Regels</string>
<string name="server_administrator">Beheerder</string>
<string name="send_email_to_server_admin">Bericht aan beheerder</string>
<string name="notifications_disabled_in_system">Schakel meldingen vanuit instellingen van uw apparaat in om van overal updates te zien.</string>
<string name="settings_even_more">Nog meer instellingen</string>
<string name="settings_show_cws">Inhoudswaarschuwingen tonen</string>
<string name="settings_hide_sensitive_media">Als gevoelig gemarkeerde media verbergen</string>
<string name="settings_show_interaction_counts">Aantal berichtinteracties</string>
<string name="settings_show_emoji_in_names">Aangepaste emoji in weergavenamen</string>
<plurals name="in_x_seconds">
<item quantity="one">in %d seconde</item>
<item quantity="other">in %d seconden</item>
</plurals>
<plurals name="in_x_minutes">
<item quantity="one">in %d minuut</item>
<item quantity="other">in %d minuten</item>
</plurals>
<plurals name="in_x_hours">
<item quantity="one">in %d uur</item>
<item quantity="other">in %d uur</item>
</plurals>
<plurals name="x_hours_ago">
<item quantity="one">%d uur geleden</item>
<item quantity="other">%d uur geleden</item>
</plurals>
<string name="alt_text_reminder_title">Media zonder alt-tekst</string>
<plurals name="alt_text_reminder_x_images">
<item quantity="one">%s van je afbeeldingen mist alt-tekst. Toch plaatsen?</item>
<item quantity="other">%s van je afbeeldingen missen alt-tekst. Toch plaatsen?</item>
</plurals>
<plurals name="alt_text_reminder_x_attachments">
<item quantity="one">%s van je mediabijlagen mist alt-tekst. Toch plaatsen?</item>
<item quantity="other">%s van je mediabijlagen missen alt-tekst. Toch plaatsen?</item>
</plurals>
<string name="count_one">Een</string>
<string name="count_two">Twee</string>
<string name="count_three">Drie</string>
@@ -445,7 +517,83 @@
<string name="alt_text_reminder_post_anyway">Plaatsen</string>
<!-- %s is the username -->
<string name="unfollow_confirmation">%s ontvolgen?</string>
<string name="filter_active">Actief</string>
<string name="filter_inactive">Inactief</string>
<string name="settings_add_filter">Filter toevoegen</string>
<string name="settings_edit_filter">Filter bewerken</string>
<string name="settings_filter_duration">Duur</string>
<string name="settings_filter_muted_words">Gedempte woorden</string>
<string name="settings_filter_context">Gedempt van</string>
<string name="settings_filter_show_cw">Toon met inhoudswaarschuwing</string>
<string name="settings_filter_show_cw_explanation">Berichten die met dit filter overeenkomen, maar achter een inhoudswaarschuwing zitten toch tonen</string>
<string name="settings_delete_filter">Filter verwijderen</string>
<string name="filter_duration_forever">Voor altijd</string>
<!-- %s is the timestamp ("tomorrow at 12:34") -->
<string name="settings_filter_ends">Eindigt %s</string>
<plurals name="settings_x_muted_words">
<item quantity="one">%d gedempt woord of zin</item>
<item quantity="other">%d gedempte woorden of zinnen</item>
</plurals>
<string name="selection_2_options">%1$s en %2$s</string>
<string name="selection_3_options">%1$s, %2$s en %3$s</string>
<string name="selection_4_or_more">%1$s, %2$s en %3$d meer</string>
<string name="filter_context_home_lists">Startpagina &amp; lijsten</string>
<string name="filter_context_notifications">Meldingen</string>
<string name="filter_context_public_timelines">Openbare tijdlijnen</string>
<string name="filter_context_threads_replies">Threads &amp; antwoorden</string>
<string name="filter_context_profiles">Profielen</string>
<string name="settings_filter_title">Titel</string>
<string name="settings_delete_filter_title">Filter %s verwijderen?</string>
<string name="settings_delete_filter_confirmation">Dit filter zal op al uw apparaten uit uw account worden verwijderd.</string>
<string name="add_muted_word">Gedempte woord toevoegen</string>
<string name="edit_muted_word">Gedempte woord bewerken</string>
<string name="add">Toevoegen</string>
<string name="filter_word_or_phrase">Woord of zin</string>
<string name="filter_add_word_help">Woorden zijn niet hoofdlettergevoelig en komen alleen overeen met volledige woorden.\n\nAls je op de term Apple filtert, verbergt het berichten die apple of aPpLe bevatten, maar niet ananas.</string>
<string name="settings_delete_filter_word">%s verwijderen?</string>
<string name="enter_selection_mode">Selecteren</string>
<string name="select_all">Alles selecteren</string>
<string name="settings_filter_duration_title">Filter tijdsduur</string>
<string name="filter_duration_custom">Aangepast</string>
<plurals name="settings_delete_x_filter_words">
<item quantity="one">%d woord verwijderen?</item>
<item quantity="other">%d woorden verwijderen?</item>
</plurals>
<plurals name="x_items_selected">
<item quantity="one">%d geselecteerd</item>
<item quantity="other">%d geselecteerd</item>
</plurals>
<string name="required_form_field_blank">Mag niet leeg zijn</string>
<string name="filter_word_already_in_list">Al in de lijst</string>
<string name="app_update_ready">App-update voltooid</string>
<string name="app_update_version">Versie %s</string>
<string name="downloading_update">Downloaden (%d%%)</string>
<!-- Shown like a content warning, %s is the name of the filter -->
<string name="post_matches_filter_x">Komt overeen met filter %s</string>
<string name="search_mastodon">Mastodon doorzoeken</string>
<string name="clear_all">Alles wissen</string>
<string name="search_open_url">URL in Mastodon openen</string>
<string name="posts_matching_hashtag">Berichten met %s</string>
<string name="search_go_to_account">Ga naar %s</string>
<string name="posts_matching_string">Berichten met %s</string>
<string name="accounts_matching_string">Personen met %s</string>
<!-- Shown in the post header. Please keep it short -->
<string name="time_seconds_ago_short">%ds geleden</string>
<string name="time_minutes_ago_short">%dm geleden</string>
<string name="time_hours_ago_short">%du geleden</string>
<string name="time_days_ago_short">%d dagen geleden</string>
<!-- %s is the name of the post language -->
<string name="translate_post">Vanuit het %s vertalen</string>
<!-- %1$s is the language, %2$s is the name of the translation service -->
<string name="post_translated">Vertaald vanuit het %1$s door %2$s</string>
<string name="translation_show_original">Origineel bekijken</string>
<string name="translation_failed">Vertaling mislukt. Mogelijk heeft de serverbeheerder vertalingen niet ingeschakeld op deze server, of draait deze server een oude versie van Mastodon waar vertalingen nog niet worden ondersteund.</string>
<plurals name="x_participants">
<item quantity="one">%d deelnemer</item>
<item quantity="other">%d deelnemers</item>
</plurals>
<plurals name="x_posts_today">
<item quantity="one">%,d bericht vandaag</item>
<item quantity="other">%,d berichten vandaag</item>
</plurals>
</resources>

View File

@@ -387,7 +387,6 @@
<string name="welcome_to_mastodon">Velkommen til Mastodon</string>
<string name="welcome_paragraph1">Mastodon er et desentralisert sosialt nettverk, som betyr at ingen selskaper kontrollerer det. Det består av mange uavhengige servere som er koblet sammen.</string>
<string name="what_are_servers">Hva er en server?</string>
<string name="welcome_paragraph2"><![CDATA[Enhver Mastodon konto er en vert på en server - med sine egne verdier, regler og administratorer. Uansett hvilken du velger, kan du følge og samhandle med folk på hvilken som helst server.]]></string>
<string name="opening_link">Åpner link…</string>
<string name="link_not_supported">Denne linken støttes ikke av appen</string>
<string name="log_out_all_accounts">Logg ut av alle kontoer</string>
@@ -582,4 +581,6 @@
<string name="time_minutes_ago_short">%dm siden</string>
<string name="time_hours_ago_short">%dt siden</string>
<string name="time_days_ago_short">%dd siden</string>
<!-- %s is the name of the post language -->
<!-- %1$s is the language, %2$s is the name of the translation service -->
</resources>

View File

@@ -79,4 +79,6 @@
<!-- %s is the timestamp ("tomorrow at 12:34") -->
<!-- Shown like a content warning, %s is the name of the filter -->
<!-- Shown in the post header. Please keep it short -->
<!-- %s is the name of the post language -->
<!-- %1$s is the language, %2$s is the name of the translation service -->
</resources>

View File

@@ -425,7 +425,6 @@
<string name="welcome_to_mastodon">Witaj na Mastodonie</string>
<string name="welcome_paragraph1">Mastodon to zdecentralizowana sieć społecznościowa, co oznacza że żadna firma nie może nią kontrolować w całości. Składa się z wielu niezależnych od siebie serwerów, które się ze sobą komunikują.</string>
<string name="what_are_servers">Czym są serwery?</string>
<string name="welcome_paragraph2"><![CDATA[Każde konto na Mastodonie jest hostowane na instancjach, które wyróżniają się wartościami, zasadami i administracją. Nieważne, jaką wybierzesz - i tak będziesz mógł/mogła kontaktować się nawet z tymi spoza Twojej instancji.]]></string>
<string name="opening_link">Otwieranie linku…</string>
<string name="link_not_supported">Ten link nie jest wspierany w aplikacji</string>
<string name="log_out_all_accounts">Wyloguj się wszędzie</string>
@@ -458,4 +457,6 @@
<!-- %s is the timestamp ("tomorrow at 12:34") -->
<!-- Shown like a content warning, %s is the name of the filter -->
<!-- Shown in the post header. Please keep it short -->
<!-- %s is the name of the post language -->
<!-- %1$s is the language, %2$s is the name of the translation service -->
</resources>

View File

@@ -8,7 +8,7 @@
<string name="ok">OK</string>
<string name="preparing_auth">Preparando para autenticação…</string>
<string name="finishing_auth">Finalizando autenticação…</string>
<string name="user_boosted">%s impulsionado</string>
<string name="user_boosted">%s impulsionou</string>
<string name="in_reply_to">Em resposta à %s</string>
<string name="notifications">Notificações</string>
<string name="user_followed_you">%s seguiu você</string>
@@ -236,7 +236,9 @@
<string name="follow_user">Seguir %s</string>
<string name="unfollowed_user">Deixou de seguir %s</string>
<string name="followed_user">Agora você está seguindo %s</string>
<string name="following_user_requested">Solicitou para te seguir %s</string>
<string name="open_in_browser">Abrir no navegador</string>
<string name="hide_boosts_from_user">Ocultar boosts de %s</string>
<string name="signup_reason">Por que você deseja se inscrever?</string>
<string name="signup_reason_note">Isso vai nos ajudar a revisar sua inscrição.</string>
<string name="clear">Limpar</string>
@@ -365,6 +367,7 @@
<string name="poll_multiple_choice">Escolha um ou mais</string>
<string name="save_changes">Salvar alterações</string>
<string name="profile_featured">Destaques</string>
<string name="profile_timeline">Linha do tempo</string>
<string name="view_all">Visualizar tudo</string>
<string name="profile_endorsed_accounts">Contas</string>
<string name="verified_link">Link verificado</string>
@@ -377,7 +380,7 @@
<string name="welcome_to_mastodon">Bem-vindo ao Mastodon</string>
<string name="welcome_paragraph1">Mastodon é uma rede social descentralizada, o que significa que nenhuma empresa a controla. É composto de muitos servidores executados de forma independente, todos conectados entre si.</string>
<string name="what_are_servers">O que são servidores?</string>
<string name="welcome_paragraph2"><![CDATA[Cada conta Mastodon é hospedada em um servidor - cada um com seus próprios valores, regras e administradores. Não importa qual você escolha, você pode seguir e interagir com as pessoas que estão em qualquer outro servidor.]]></string>
<string name="welcome_paragraph2">Todas as contas no Mastodon são hospedadas em um servidor cada um com seus próprios valores, regras, &amp; administradores. Não importa qual você escolha, você pode seguir e interagir com pessoas que estão em qualquer outro servidor.</string>
<string name="opening_link">Abrindo link…</string>
<string name="link_not_supported">Este link não é compatível com o aplicativo</string>
<string name="log_out_all_accounts">Sair de todas as contas</string>
@@ -462,10 +465,12 @@
<!-- %s is the timestamp ("tomorrow at 12:34") -->
<string name="pause_notifications_ends">Termina %s</string>
<!-- %s is the timestamp ("tomorrow at 12:34") -->
<string name="pause_notifications_banner">Notificações serão retomadas %s.</string>
<string name="open_system_notification_settings">Vá para as configurações de notificação</string>
<string name="about_server">Sobre</string>
<string name="server_rules">Regras</string>
<string name="server_administrator">Administrador</string>
<string name="send_email_to_server_admin">Contatar administrador</string>
<string name="notifications_disabled_in_system">Ative as notificações nas configurações do seu dispositivo para ver as atualizações de qualquer lugar.</string>
<string name="settings_even_more">Ainda mais configurações</string>
<string name="settings_show_cws">Mostrar avisos de conteúdo</string>
@@ -566,4 +571,6 @@
<string name="time_minutes_ago_short">%dm atrás</string>
<string name="time_hours_ago_short">%dh atrás</string>
<string name="time_days_ago_short">%dd atrás</string>
<!-- %s is the name of the post language -->
<!-- %1$s is the language, %2$s is the name of the translation service -->
</resources>

View File

@@ -234,4 +234,6 @@
<!-- %s is the timestamp ("tomorrow at 12:34") -->
<!-- Shown like a content warning, %s is the name of the filter -->
<!-- Shown in the post header. Please keep it short -->
<!-- %s is the name of the post language -->
<!-- %1$s is the language, %2$s is the name of the translation service -->
</resources>

View File

@@ -48,4 +48,6 @@
<!-- %s is the timestamp ("tomorrow at 12:34") -->
<!-- Shown like a content warning, %s is the name of the filter -->
<!-- Shown in the post header. Please keep it short -->
<!-- %s is the name of the post language -->
<!-- %1$s is the language, %2$s is the name of the translation service -->
</resources>

View File

@@ -425,7 +425,7 @@
<string name="welcome_to_mastodon">Добро пожаловать в Mastodon</string>
<string name="welcome_paragraph1">Mastodon - это децентрализованная социальная сеть, то есть ни одна компания не контролирует ее. Она состоит из множества независимо управляемых серверов, соединенных вместе.</string>
<string name="what_are_servers">Что такое сервер?</string>
<string name="welcome_paragraph2"><![CDATA[Каждый аккаунт Mastodon размещается на сервере - каждый со своими ценностями, правилами и администраторами. Независимо от того, какой сервер вы выберете, вы можете следить и взаимодействовать с людьми на любом сервере.]]></string>
<string name="welcome_paragraph2">Каждый аккаунт Mastodon размещается на сервере - каждый со своими ценностями, правилами и администраторами. Независимо от того, какой сервер вы выберете, вы можете следить и взаимодействовать с людьми на любом сервере.</string>
<string name="opening_link">Открытие ссылки…</string>
<string name="link_not_supported">Эта ссылка не поддерживается в приложении</string>
<string name="log_out_all_accounts">Выйти из всех аккаунтов</string>
@@ -640,4 +640,25 @@
<string name="time_minutes_ago_short">%d мин. назад</string>
<string name="time_hours_ago_short">%d ч. назад</string>
<string name="time_days_ago_short">%d д. назад</string>
<!-- %s is the name of the post language -->
<string name="translate_post">Перевести %s</string>
<!-- %1$s is the language, %2$s is the name of the translation service -->
<string name="post_translated">%1$s переведён с помощью %2$s</string>
<string name="translation_show_original">Показать оригинал</string>
<string name="translation_failed">Перевод не удался. Возможно, администратор не включил переводы на этом сервере или на этом сервере установлена ​​более старая версия Mastodon, где переводы еще не поддерживаются.</string>
<string name="settings_privacy">Приватность и доступ</string>
<string name="settings_discoverable">Показывать профиль и посты в алгоритмах рекомендаций</string>
<string name="settings_indexable">Включить публичные посты в результаты поиска</string>
<plurals name="x_participants">
<item quantity="one">%,d участник</item>
<item quantity="few">%,d участника</item>
<item quantity="many">%,d участников</item>
<item quantity="other">%,d участников</item>
</plurals>
<plurals name="x_posts_today">
<item quantity="one">%,d пост сегодня</item>
<item quantity="few">%,d поста сегодня</item>
<item quantity="many">%,d постов сегодня</item>
<item quantity="other">%,d постов сегодня</item>
</plurals>
</resources>

View File

@@ -75,4 +75,6 @@
<!-- %s is the timestamp ("tomorrow at 12:34") -->
<!-- Shown like a content warning, %s is the name of the filter -->
<!-- Shown in the post header. Please keep it short -->
<!-- %s is the name of the post language -->
<!-- %1$s is the language, %2$s is the name of the translation service -->
</resources>

View File

@@ -272,7 +272,10 @@
<string name="no_app_to_handle_action">Ni programa za ravnanje s tem dejanjem</string>
<string name="local_timeline">Krajevno</string>
<string name="trending_posts_info_banner">To so objave, ki plenijo pozornost po Mastodonu.</string>
<string name="trending_links_info_banner">To so novice, o katerih se govori na Mastodonu.</string>
<!-- %s is the server domain -->
<string name="local_timeline_info_banner">To so vse objave vseh uporabnikov na vašem strežniku (%s).</string>
<string name="recommended_accounts_info_banner">Glede na to, komu sledite, vam bodo ti računi všeč.</string>
<string name="see_new_posts">Pokaži nove objave</string>
<string name="load_missing_posts">Naloži manjkajoče objave</string>
<string name="follow_back">Sledijo nazaj</string>
@@ -385,6 +388,7 @@
<!-- Shown in a progress dialog when you tap "follow all" -->
<string name="sending_follows">Sledenje uporabnikom ...</string>
<!-- %1$s is server domain, %2$s is email domain. You can reorder these placeholders to fit your language better. -->
<string name="signup_email_domain_blocked">%1$s ne dovoljuje prijav s/z %2$s. Poskusite drugega ali &lt;a&gt;izberite drug strežnik&lt;/a&gt;.</string>
<string name="spoiler_show">Vseeno pokaži</string>
<string name="spoiler_hide">Ponovno skrij</string>
<string name="poll_multiple_choice">Izberi eno ali več izbir</string>
@@ -403,56 +407,89 @@
<string name="welcome_to_mastodon">Dobrodošli na Mastodon</string>
<string name="welcome_paragraph1">Mastodon je decentralizirano družbeno omrežje, kar pomeni, da ga ne upravlja nobeno posamezno podjetje. Sestavljajo ga številni neodvisni strežniki, ki so medsebojno povezani.</string>
<string name="what_are_servers">Kaj so strežniki?</string>
<string name="welcome_paragraph2"><![CDATA[Vsak račun Mastodon gostuje na strežniku — vsak strežnik ima svoje vrednote, pravila in skbrnike. Vseeno je, katerega izberete - sledite in komunicirate lahko z osebbami na poljubnem strežniku.]]></string>
<string name="welcome_paragraph2">Vsak račun Mastodon gostuje na strežniku — vsak strežnik ima svoje vrednote, pravila in skbrnike. Vseeno je, katerega izberete - sledite in komunicirate lahko z osebbami na poljubnem strežniku.</string>
<string name="opening_link">Odpiranje povezav ...</string>
<string name="link_not_supported">Ta povezava v aplikaciji ni podprta</string>
<string name="log_out_all_accounts">Odjava iz vseh računov</string>
<string name="confirm_log_out_all_accounts">Ali se želite odjaviti iz vseh računov?</string>
<string name="retry">Poskusi znova</string>
<string name="post_failed">Objave ni možno poslati</string>
<!-- %s is formatted file size ("467 KB image") -->
<string name="attachment_description_image">%s slika</string>
<string name="attachment_description_video">%s video posnetek</string>
<string name="attachment_description_audio">%s zvočni posnetek</string>
<string name="attachment_description_unknown">%s datoteka</string>
<string name="attachment_type_image">Slika</string>
<string name="attachment_type_video">Video</string>
<string name="attachment_type_audio">Zvok</string>
<string name="attachment_type_gif">GIF</string>
<string name="attachment_type_unknown">Datoteka</string>
<string name="add_poll_option">Dodaj možen odgovor v anketi</string>
<string name="poll_length">Dolžina ankete</string>
<string name="poll_style">Slog</string>
<string name="compose_poll_single_choice">Izberite eno možnost</string>
<string name="compose_poll_multiple_choice">Več možnosti</string>
<string name="delete_poll_option">Izbriši možen odgovor v anketi</string>
<string name="poll_style_title">Slog ankete</string>
<string name="alt_text">Nadomestno besedilo</string>
<string name="help">Pomoč</string>
<string name="what_is_alt_text">Kaj je nadomestno besedilo (alt text)?</string>
<string name="edit_post">Uredi objavo</string>
<string name="no_verified_link">Ni preverjenih povezav</string>
<string name="compose_autocomplete_users_empty">Najdite tiste, ki jih iščete</string>
<string name="no_search_results">Za ta iskalni niz ni zadetkov</string>
<string name="language">Jezik</string>
<string name="language_default">Privzeto</string>
<string name="language_system">sistemski</string>
<string name="language_detecting">Zaznavanje jezika</string>
<string name="language_cant_detect">Jezika ni moč zaznati</string>
<string name="language_detected">Zaznano</string>
<string name="media_hidden">Mediji so skriti</string>
<string name="post_hidden">Skrita objava</string>
<string name="report_title_post">Prijavi objavo</string>
<string name="forward_report_explanation">Račun je z drugega strežnika. Ali želite poslati anonimno kopijo prijave tudi na drugi strežnik?</string>
<!-- %s is the server domain -->
<string name="forward_report_to_server">Posreduj k %s</string>
<!-- Shown on the "stamp" on the screen that appears after you report a post/user. Please keep the translation short, preferably a single word -->
<string name="reported">Prijavljeno</string>
<string name="mark_all_notifications_read">Označi vse kot prebrano</string>
<string name="settings_filters">Filtri</string>
<!-- %s is the app name (Mastodon, key app_name). I made it a placeholder so everything Just Works™ with forks -->
<string name="about_app">O programu %s</string>
<string name="default_post_language">Privzeti jezik objave</string>
<string name="settings_confirm_delete_post">Vprašaj pred brisanjem objav</string>
<string name="pause_all_notifications">Premor za vse</string>
<string name="pause_notifications_off">Izklopljeno</string>
<string name="notifications_policy_anyone">Kdor koli</string>
<string name="notifications_policy_followed">Ljudje, ki vam sledijo</string>
<string name="notifications_policy_follower">Ljudje, ki jim sledite</string>
<string name="notifications_policy_no_one">Nihče</string>
<string name="notification_type_mentions_and_replies">Omembe in odgovori</string>
<string name="pause_all_notifications_title">Zaustavi vsa obvestila</string>
<!-- %1$s is the date (may be relative, e.g. "today" or "yesterday"), %2$s is the time. You can reorder these placeholders if that works better for your language -->
<string name="date_at_time">%1$s ob %2$s</string>
<string name="today">danes</string>
<string name="yesterday">včeraj</string>
<string name="tomorrow">jutri</string>
<!-- %s is the timestamp ("tomorrow at 12:34") -->
<!-- %s is the timestamp ("tomorrow at 12:34") -->
<string name="pause_notifications_banner">Obveščanje se bo nadaljevalo: %s.</string>
<string name="resume_notifications_now">Nadaljuj zdaj</string>
<string name="open_system_notification_settings">Pojdi k nastavitvam obvestil</string>
<string name="about_server">O programu</string>
<string name="server_rules">Pravila</string>
<string name="server_administrator">Skrbnik</string>
<string name="settings_even_more">Še več nastavitev</string>
<string name="settings_show_cws">Pokaži opozorilo o vsebini</string>
<string name="settings_hide_sensitive_media">Skrij medij, ki je označen kot občutljiv</string>
<string name="settings_show_interaction_counts">Števci interakcije objave</string>
<string name="count_one">Ena</string>
<string name="count_two">Dva</string>
<string name="count_three">Tri</string>
<string name="count_four">Štiri</string>
<string name="alt_text_reminder_post_anyway">Objavi</string>
<!-- %s is the username -->
<string name="unfollow_confirmation">Ne želite slediti %s?</string>
<string name="filter_active">Dejaven</string>
<string name="filter_inactive">Nedejaven</string>
<string name="settings_add_filter">Dodaj filter</string>
@@ -463,14 +500,22 @@
<string name="settings_delete_filter">Izbriši filter</string>
<string name="filter_duration_forever">Za vedno</string>
<!-- %s is the timestamp ("tomorrow at 12:34") -->
<string name="selection_2_options">%1$s in %2$s</string>
<string name="selection_3_options">%1$s, %2$s in %3$s</string>
<string name="selection_4_or_more">%1$s, %2$s in še dodatnih %3$d</string>
<string name="filter_context_notifications">Obvestila</string>
<string name="filter_context_public_timelines">Javne časovnice</string>
<string name="filter_context_threads_replies">Niti in odgovori</string>
<string name="filter_context_profiles">Profili</string>
<string name="settings_filter_title">Naslov</string>
<string name="settings_delete_filter_title">Ali želite izbrisati filter »%s«?</string>
<string name="settings_delete_filter_confirmation">Ta filter bo izbrisan iz vašega računa na vseh vaših napravah.</string>
<string name="add_muted_word">Dodaj utišano besedo</string>
<string name="edit_muted_word">Uredi utišano besedo</string>
<string name="add">Dodaj</string>
<string name="filter_word_or_phrase">Beseda ali besedna zveza</string>
<string name="settings_delete_filter_word">Ali želite izbrisati besedo »%s«?</string>
<string name="enter_selection_mode">Izberite</string>
<string name="select_all">Izberi vse</string>
<string name="settings_filter_duration_title">Filtriraj po trajanju</string>
<string name="filter_duration_custom">Po meri</string>
@@ -493,4 +538,13 @@
<string name="time_minutes_ago_short">pred %d meseci</string>
<string name="time_hours_ago_short">pred %dh urami</string>
<string name="time_days_ago_short">pred %d dnemi</string>
<!-- %s is the name of the post language -->
<string name="translate_post">Prevedi iz jezika: %s</string>
<!-- %1$s is the language, %2$s is the name of the translation service -->
<string name="post_translated">Prevedeno iz %1$s s pomočjo %2$s</string>
<string name="translation_show_original">Pokaži izvirnik</string>
<string name="translation_failed">Prevod je spodletel. Morda skrbnik ni omogočil prevajanja na tem strežniku ali pa strežnik teče na starejši različici Masotodona, na kateri prevajanje še ni podprto.</string>
<string name="settings_privacy">Zasebnost in dosegljivost</string>
<string name="settings_discoverable">Izpostavljaj profile in objave v algoritmih odkrivanja</string>
<string name="settings_indexable">Med zadetke iskanja vključi javne objave</string>
</resources>

View File

@@ -12,6 +12,7 @@
<string name="in_reply_to">Som svar på %s</string>
<string name="notifications">Notiser</string>
<string name="user_followed_you">%s följde dig</string>
<string name="user_favorited">%s favoritmarkerade ditt inlägg</string>
<string name="share_toot_title">Dela</string>
<string name="settings">Inställningar</string>
<string name="publish">Publicera</string>
@@ -138,6 +139,7 @@
<string name="sending_report">Skickar rapport…</string>
<string name="unfollow_user">Avfölj %s</string>
<string name="unfollow">Avfölj</string>
<string name="report_personal_title">Vill du inte se detta?</string>
<string name="back">Tillbaka</string>
<string name="search_communities">Servernamn eller URL</string>
<string name="instance_rules_title">Serverregler</string>
@@ -164,6 +166,7 @@
<string name="category_tech">Teknik</string>
<string name="confirm_email_title">Kolla din inkorg</string>
<!-- %s is the email address -->
<string name="confirm_email_didnt_get">Fick du ingen länk?</string>
<string name="resend">Skicka igen</string>
<string name="open_email_app">Öppna e-postappen</string>
<string name="resent_email">Bekräftelse via e-post skickad</string>
@@ -227,6 +230,7 @@
<string name="file_saved">Filen sparad</string>
<string name="downloading">Laddar ner…</string>
<!-- %s is the server domain -->
<string name="recommended_accounts_info_banner">Du kanske gillar dessa konton baserat på andra konton du följer.</string>
<string name="see_new_posts">Se nya inlägg</string>
<string name="load_missing_posts">Ladda saknade inlägg</string>
<string name="follow_back">Följ tillbaka</string>
@@ -343,7 +347,6 @@
<string name="welcome_to_mastodon">Välkommen till Mastodon</string>
<string name="welcome_paragraph1">Mastodon är ett decentraliserat socialt nätverk, vilket innebär att inget enskilt företag kontrollerar det. Det består av många oberoende servrar, alla sammankopplade.</string>
<string name="what_are_servers">Vad är servrar?</string>
<string name="welcome_paragraph2"><![CDATA[Varje Mastodon-konto finns på en server — var och en med sina värderingar, regler och administratörer. Oavsett vilken du väljer kan du följa och interagera med människor på vilken server som helst.]]></string>
<string name="log_out_all_accounts">Logga ut från alla konton</string>
<string name="confirm_log_out_all_accounts">Logga ut från alla konton?</string>
<string name="retry">Försök igen</string>
@@ -352,22 +355,27 @@
<string name="attachment_description_video">%s video</string>
<string name="attachment_description_audio">%s ljud</string>
<string name="attachment_description_unknown">%s fil</string>
<string name="attachment_type_image">Bild</string>
<string name="attachment_type_video">Video</string>
<string name="attachment_type_audio">Ljud</string>
<string name="attachment_type_gif">GIF</string>
<string name="attachment_type_unknown">Fil</string>
<string name="help">Hjälp</string>
<string name="edit_post">Redigera inlägg</string>
<string name="no_verified_link">Ingen verifierad länk</string>
<string name="language">Språk</string>
<string name="language_default">Standard</string>
<string name="report_title_post">Rapportera inlägg</string>
<!-- %s is the server domain -->
<!-- Shown on the "stamp" on the screen that appears after you report a post/user. Please keep the translation short, preferably a single word -->
<string name="reported">Rapporterad</string>
<string name="mark_all_notifications_read">Markera alla som lästa</string>
<string name="settings_filters">Filter</string>
<string name="settings_server_explanation">Översikt, regler och moderatorer</string>
<!-- %s is the app name (Mastodon, key app_name). I made it a placeholder so everything Just Works™ with forks -->
<string name="about_app">Om %s</string>
<string name="settings_confirm_delete_post">Fråga innan du raderar inlägg</string>
<string name="notifications_policy_followed">Personer som följer dig</string>
<string name="notifications_policy_no_one">Ingen</string>
<plurals name="x_weeks">
<item quantity="one">%d vecka</item>
@@ -379,10 +387,18 @@
<string name="about_server">Om</string>
<string name="server_rules">Regler</string>
<string name="server_administrator">Administratör</string>
<string name="settings_show_emoji_in_names">Anpassad emoji i visningsnamn</string>
<plurals name="in_x_hours">
<item quantity="one">om %d timme</item>
<item quantity="other">om %d timmar</item>
</plurals>
<plurals name="x_hours_ago">
<item quantity="one">%d timme sedan</item>
<item quantity="other">%d timmar sedan</item>
</plurals>
<string name="count_two">Två</string>
<string name="count_three">Tre</string>
<string name="count_four">Fyra</string>
<!-- %s is the username -->
<string name="filter_active">Aktiv</string>
<string name="filter_inactive">Inaktiv</string>
@@ -393,18 +409,29 @@
<string name="selection_2_options">%1$s och %2$s</string>
<string name="selection_3_options">%1$s, %2$s och %3$s</string>
<string name="filter_context_profiles">Profiler</string>
<string name="settings_delete_filter_confirmation">Detta filter kommer raderas från ditt konto på alla dina enheter.</string>
<string name="add">Lägg till</string>
<string name="filter_word_or_phrase">Ord eller fras</string>
<string name="enter_selection_mode">Välj</string>
<string name="select_all">Välj alla</string>
<plurals name="settings_delete_x_filter_words">
<item quantity="one">Radera %d ord?</item>
<item quantity="other">Radera %d ord?</item>
</plurals>
<string name="app_update_version">Version %s</string>
<!-- Shown like a content warning, %s is the name of the filter -->
<string name="post_matches_filter_x">Matchar filter \"%s\"</string>
<string name="search_mastodon">Sök i Mastodon</string>
<string name="clear_all">Rensa alla</string>
<string name="search_open_url">Öppna URL i Mastodon</string>
<string name="posts_matching_hashtag">Inlägg med \"%s\"</string>
<string name="search_go_to_account">Gå till %s</string>
<!-- Shown in the post header. Please keep it short -->
<string name="time_seconds_ago_short">%ds sedan</string>
<string name="time_minutes_ago_short">%dm sedan</string>
<string name="time_hours_ago_short">%dt sedan</string>
<string name="time_days_ago_short">%dd sedan</string>
<!-- %s is the name of the post language -->
<string name="translate_post">Översätt från %s</string>
<!-- %1$s is the language, %2$s is the name of the translation service -->
</resources>

View File

@@ -368,7 +368,7 @@
<string name="welcome_to_mastodon">ยินดีต้อนรับสู่ Mastodon</string>
<string name="welcome_paragraph1">Mastodon เป็นเครือข่ายสังคมแบบกระจายศูนย์ หมายความว่าไม่มีบริษัทใดควบคุมเครือข่ายสังคม เครือข่ายสังคมประกอบด้วยเซิร์ฟเวอร์ที่ทำงานอย่างอิสระจำนวนมาก ทั้งหมดเชื่อมต่อเข้าด้วยกัน</string>
<string name="what_are_servers">เซิร์ฟเวอร์คืออะไร?</string>
<string name="welcome_paragraph2"><![CDATA[ทุกบัญชี Mastodon ได้รับการโฮสต์ในเซิร์ฟเวอร์ — แต่ละแห่งมีค่า, กฎ และผู้ดูแลของเซิร์ฟเวอร์เอง ไม่ว่าคุณจะเลือกเซิร์ฟเวอร์ใด คุณสามารถติดตามและโต้ตอบกับผู้คนในเซิร์ฟเวอร์ใด ๆ]]></string>
<string name="welcome_paragraph2">ทุกบัญชี Mastodon ได้รับการโฮสต์ในเซิร์ฟเวอร์ — แต่ละแห่งมีค่า, กฎ และผู้ดูแลของเซิร์ฟเวอร์เอง ไม่ว่าคุณจะเลือกเซิร์ฟเวอร์ใด คุณสามารถติดตามและโต้ตอบกับผู้คนในเซิร์ฟเวอร์ใด ๆ</string>
<string name="opening_link">กำลังเปิดลิงก์…</string>
<string name="link_not_supported">ไม่รองรับลิงก์นี้ในแอป</string>
<string name="log_out_all_accounts">ออกจากระบบบัญชีทั้งหมด</string>
@@ -553,4 +553,19 @@
<string name="time_minutes_ago_short">%d นาทีที่แล้ว</string>
<string name="time_hours_ago_short">%d ชั่วโมงที่แล้ว</string>
<string name="time_days_ago_short">%d วันที่แล้ว</string>
<!-- %s is the name of the post language -->
<string name="translate_post">แปลจาก %s</string>
<!-- %1$s is the language, %2$s is the name of the translation service -->
<string name="post_translated">แปลจาก %1$s โดยใช้ %2$s</string>
<string name="translation_show_original">แสดงดั้งเดิม</string>
<string name="translation_failed">การแปลล้มเหลว บางทีผู้ดูแลอาจไม่ได้เปิดใช้งานการแปลในเซิร์ฟเวอร์นี้หรือเซิร์ฟเวอร์นี้กำลังใช้ Mastodon รุ่นเก่ากว่าที่ยังไม่รองรับการแปล</string>
<string name="settings_privacy">ความเป็นส่วนตัวและการเข้าถึง</string>
<string name="settings_discoverable">แสดงโปรไฟล์และโพสต์ในอัลกอริทึมการค้นพบ</string>
<string name="settings_indexable">รวมโพสต์สาธารณะในผลลัพธ์การค้นหา</string>
<plurals name="x_participants">
<item quantity="other">%,d ผู้มีส่วนร่วม</item>
</plurals>
<plurals name="x_posts_today">
<item quantity="other">%,d โพสต์วันนี้</item>
</plurals>
</resources>

View File

@@ -387,7 +387,7 @@
<string name="welcome_to_mastodon">Mastodon\'a hoş geldiniz</string>
<string name="welcome_paragraph1">Mastodon merkezi olmayan bir sosyal ağdır, yani onu tek bir şirket kontrol etmiyor. Hepsi birbirine bağlı, bağımsız olarak çalışan birçok sunucudan oluşur.</string>
<string name="what_are_servers">Sunucular nedir?</string>
<string name="welcome_paragraph2"><![CDATA[Her Mastodon hesabı bir sunucuda barındırılır - her birinin kendi değerleri, kuralları ve yöneticileri vardır. Hangisini seçerseniz seçin, herhangi bir sunucudaki insanları takip edebilir ve onlarla etkileşime geçebilirsiniz.]]></string>
<string name="welcome_paragraph2">Her Mastodon hesabı bir sunucuda barındırılır - her birinin kendi değerleri, kuralları ve yöneticileri vardır. Hangisini seçerseniz seçin, herhangi bir sunucudaki insanları takip edebilir ve onlarla etkileşime geçebilirsiniz.</string>
<string name="opening_link">Bağlantıılıyor…</string>
<string name="link_not_supported">Bu bağlantı uygulamada desteklenmiyor</string>
<string name="log_out_all_accounts">Tüm hesaplardan çıkış yap</string>
@@ -582,4 +582,21 @@
<string name="time_minutes_ago_short">%ddk önce</string>
<string name="time_hours_ago_short">%dsa önce</string>
<string name="time_days_ago_short">%dg önce</string>
<!-- %s is the name of the post language -->
<string name="translate_post">%s dilinden çevrildi</string>
<!-- %1$s is the language, %2$s is the name of the translation service -->
<string name="post_translated">%2$s kullanılarak %1$s dilinden çevrildi</string>
<string name="translation_show_original">Özgün içeriği göster</string>
<string name="translation_failed">Çeviri başarısız oldu. Yönetici bu sunucuda çevirileri etkinleştirmemiş olabilir veya bu sunucu çevirilerin henüz desteklenmediği eski bir Mastodon sürümünü çalıştırıyor olabilir.</string>
<string name="settings_privacy">Gizlilik ve erişim</string>
<string name="settings_discoverable">Profil ve gönderileri keşif algoritmalarında kullan</string>
<string name="settings_indexable">Herkese açık gönderileri arama sonuçlarına ekle</string>
<plurals name="x_participants">
<item quantity="one">%d katılımcılar</item>
<item quantity="other">%d katılımcılar</item>
</plurals>
<plurals name="x_posts_today">
<item quantity="one">%,d bunu gönder</item>
<item quantity="other">%,d bunları gönder</item>
</plurals>
</resources>

View File

@@ -425,7 +425,7 @@
<string name="welcome_to_mastodon">Вітаємо у Mastodon</string>
<string name="welcome_paragraph1">Mastodon - це децентралізована соціальна мережа, тобто жодна компанія не контролює її. Вона складається з багатьох незалежних серверів, які з\'єднані між собою.</string>
<string name="what_are_servers">Що таке сервери?</string>
<string name="welcome_paragraph2"><![CDATA[Кожен акаунт Mastodon розміщений на сервері, й кожен сервер має особисті цінності, правила, й адмінів. Немає різниці, який ви оберете. Ви можете підписуватися та спілкуватися з усіма, навіть якщо ви на різних серверах.]]></string>
<string name="welcome_paragraph2">Кожен обліковий запис Mastodon розміщений на сервері - кожен сервер має свої цінності, правила, й &amp; адмінів. Немає різниці, який ви оберете, ви зможете підписуватися та спілкуватися з користувачами з будь-якого.</string>
<string name="opening_link">Відкриття посилання…</string>
<string name="link_not_supported">Це посилання не підтримується застосунком</string>
<string name="log_out_all_accounts">Вийти з усіх акаунтів</string>
@@ -640,4 +640,25 @@
<string name="time_minutes_ago_short">%dхв. тому</string>
<string name="time_hours_ago_short">%dгод. тому</string>
<string name="time_days_ago_short">%dд. тому</string>
<!-- %s is the name of the post language -->
<string name="translate_post">Перекласти з %s</string>
<!-- %1$s is the language, %2$s is the name of the translation service -->
<string name="post_translated">Перекладено з %1$s за допомогою %2$s</string>
<string name="translation_show_original">Показати оригінал</string>
<string name="translation_failed">Не вдалося виконати переклад. Можливо, адміністратор не активував переклади на цьому сервері або цей сервер використовує стару версію Mastodon, де переклади ще не підтримуються.</string>
<string name="settings_privacy">Приватність і досяжність</string>
<string name="settings_discoverable">Враховувати профіль та дописи в алгоритмах пошуку</string>
<string name="settings_indexable">Включити загальнодоступні дописи в результати пошуку</string>
<plurals name="x_participants">
<item quantity="one">%,d учасник</item>
<item quantity="few">%,d учасники</item>
<item quantity="many">%,d учасників</item>
<item quantity="other">%,d учасника</item>
</plurals>
<plurals name="x_posts_today">
<item quantity="one">%,d допис сьогодні</item>
<item quantity="few">%,d дописи сьогодні</item>
<item quantity="many">%,d дописів сьогодні</item>
<item quantity="other">%,d дописа сьогодні</item>
</plurals>
</resources>

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