Compare commits
410 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b91840fb95 | ||
|
|
fc10fbffb0 | ||
|
|
a00afd5d7f | ||
|
|
9a41a2d6fb | ||
|
|
2cd98a6620 | ||
|
|
283b56be5b | ||
|
|
6d56771aba | ||
|
|
1724d8a532 | ||
|
|
b4cdf35d36 | ||
|
|
cad0ad7a59 | ||
|
|
ca60003c39 | ||
|
|
0f030e0bac | ||
|
|
6d4f212a18 | ||
|
|
183b39bc24 | ||
|
|
27ad0c6fcf | ||
|
|
b5f661f1af | ||
|
|
0015f3f0bf | ||
|
|
c5d0fdd645 | ||
|
|
2d09ad44fb | ||
|
|
667fffd124 | ||
|
|
699233d8c7 | ||
|
|
56aabdc4a6 | ||
|
|
443e2c7a6f | ||
|
|
985b0f6e63 | ||
|
|
cc86edf276 | ||
|
|
4071b9342d | ||
|
|
f71d1bc5d3 | ||
|
|
6bcdbaba34 | ||
|
|
a2beead3a5 | ||
|
|
e7a25e353d | ||
|
|
af04a01130 | ||
|
|
fe1cfa1d7b | ||
|
|
b248797bb0 | ||
|
|
f24eba08d3 | ||
|
|
0e89559a47 | ||
|
|
d02a72e079 | ||
|
|
3be57d1b0b | ||
|
|
bed550e97c | ||
|
|
7e2619ea75 | ||
|
|
4b22f1d3a7 | ||
|
|
9dcc7e293f | ||
|
|
6a68cf5e41 | ||
|
|
29297be4a3 | ||
|
|
90b87529e0 | ||
|
|
39af05524d | ||
|
|
e3fb2cd03c | ||
|
|
90f84d628a | ||
|
|
b89e0b5c5a | ||
|
|
aac89c354c | ||
|
|
a032f9af10 | ||
|
|
642aaec6da | ||
|
|
ff667d6aed | ||
|
|
5e98496ea6 | ||
|
|
972fe1d15b | ||
|
|
26eaa36faa | ||
|
|
c517f41595 | ||
|
|
56a6d7243f | ||
|
|
18e43dfc22 | ||
|
|
816f6370ef | ||
|
|
ebc2b2e59d | ||
|
|
c9a796dbfe | ||
|
|
1ba185ea9c | ||
|
|
a78be8bc1d | ||
|
|
abfb497577 | ||
|
|
a10b184508 | ||
|
|
f0ea6660e6 | ||
|
|
a829f25d56 | ||
|
|
deff3dd8e0 | ||
|
|
6c5fb5ea09 | ||
|
|
afe0c9e0db | ||
|
|
1f2213042f | ||
|
|
5edd2466f9 | ||
|
|
f3b3a1a577 | ||
|
|
068619b815 | ||
|
|
f121e94979 | ||
|
|
b5b52529d4 | ||
|
|
876bf73454 | ||
|
|
522dbf6e4a | ||
|
|
ae685095ba | ||
|
|
30d5fe2f12 | ||
|
|
2bf27c561c | ||
|
|
bbdc72323d | ||
|
|
6e335930f3 | ||
|
|
9b309939da | ||
|
|
faf2e5115d | ||
|
|
dc5d9412c8 | ||
|
|
fc0680d66f | ||
|
|
56c9a5433f | ||
|
|
60e473ee55 | ||
|
|
ae34ecd5c3 | ||
|
|
fd1caa8729 | ||
|
|
1182e5c60c | ||
|
|
d99d515dfa | ||
|
|
70a15e7d9c | ||
|
|
1691382369 | ||
|
|
b7da9c6d51 | ||
|
|
3426538dca | ||
|
|
63de2b200b | ||
|
|
ff1ee766dc | ||
|
|
f033411adf | ||
|
|
a738eaf8c0 | ||
|
|
5074aadd6e | ||
|
|
0854961470 | ||
|
|
227b077935 | ||
|
|
1e4358290a | ||
|
|
925169eb31 | ||
|
|
e1abeb9252 | ||
|
|
cbe0add211 | ||
|
|
299b524d62 | ||
|
|
31c094e696 | ||
|
|
a8038a2863 | ||
|
|
29933bb916 | ||
|
|
5ec0c078d8 | ||
|
|
e6287f1ff2 | ||
|
|
be9caf8905 | ||
|
|
f375142084 | ||
|
|
fd3668d520 | ||
|
|
d5e03e9d9e | ||
|
|
d62f094919 | ||
|
|
6d84f28600 | ||
|
|
209e603f2c | ||
|
|
1b4dc01c74 | ||
|
|
645af12c3f | ||
|
|
fadc42d72b | ||
|
|
fc831e7d42 | ||
|
|
2998ee9145 | ||
|
|
971c4e5879 | ||
|
|
b396ee7987 | ||
|
|
0f803cd4fa | ||
|
|
167a14b8db | ||
|
|
81cbc2d10c | ||
|
|
9bd8aff99b | ||
|
|
a770828165 | ||
|
|
ab457035ff | ||
|
|
f886e4c1d2 | ||
|
|
be73c9e81c | ||
|
|
1c2183bf1a | ||
|
|
1789d90dc3 | ||
|
|
57306ff7fe | ||
|
|
f0eb6573f4 | ||
|
|
e7f5dd3357 | ||
|
|
8101bb9ea1 | ||
|
|
228fdc8ffe | ||
|
|
e9df125cde | ||
|
|
16ef577a7a | ||
|
|
734b3bced6 | ||
|
|
5f6f3c94c9 | ||
|
|
09ba42a974 | ||
|
|
d76e823489 | ||
|
|
900b204bb0 | ||
|
|
17d679901a | ||
|
|
d8036779f8 | ||
|
|
3f6bda28b3 | ||
|
|
c0b4f4dd79 | ||
|
|
f36aee44c6 | ||
|
|
cd24526a9d | ||
|
|
a345ac1390 | ||
|
|
3d987b8e1d | ||
|
|
57043912e0 | ||
|
|
00aef5ea6b | ||
|
|
369b69668c | ||
|
|
65245f4560 | ||
|
|
4d4fdc97d4 | ||
|
|
c96577891c | ||
|
|
f48b2fc9cb | ||
|
|
2fca2580ed | ||
|
|
7adc1da361 | ||
|
|
6dc24dde43 | ||
|
|
4929e0e6ec | ||
|
|
16a8b8ed71 | ||
|
|
ad1412817e | ||
|
|
d9e6bb3bea | ||
|
|
8970404638 | ||
|
|
2a2241d7f9 | ||
|
|
db1a47e8eb | ||
|
|
3e57061cef | ||
|
|
cd200f8450 | ||
|
|
782013079f | ||
|
|
e5db8acd66 | ||
|
|
1a6a8019c8 | ||
|
|
e935eef29f | ||
|
|
381defda51 | ||
|
|
02ae80c204 | ||
|
|
82214b30e8 | ||
|
|
33a1f48602 | ||
|
|
aee845e5cc | ||
|
|
cd780f6006 | ||
|
|
d4741fefa0 | ||
|
|
7e1e8a2616 | ||
|
|
d73c05cdfc | ||
|
|
78323023cb | ||
|
|
2cf084c98f | ||
|
|
e5bdeba1d7 | ||
|
|
8d7db7774f | ||
|
|
78d22c670c | ||
|
|
0a679109f5 | ||
|
|
e843142b7e | ||
|
|
72e728f655 | ||
|
|
ef56792f56 | ||
|
|
504a6959e8 | ||
|
|
b8e3060887 | ||
|
|
1aa1ede421 | ||
|
|
480dba7629 | ||
|
|
9b9c66a149 | ||
|
|
0f5eb923ee | ||
|
|
90ed28e7a0 | ||
|
|
d2b45c1c84 | ||
|
|
a119ba5f80 | ||
|
|
8c1191a08f | ||
|
|
4275d596e6 | ||
|
|
cc83f2baf3 | ||
|
|
728496b831 | ||
|
|
bbc99162c6 | ||
|
|
eed3af9e3e | ||
|
|
50187ff376 | ||
|
|
5f30919fb4 | ||
|
|
14c3cfac85 | ||
|
|
e978f02765 | ||
|
|
8d877c480f | ||
|
|
c53efee9a1 | ||
|
|
148c461e86 | ||
|
|
fcadb9883d | ||
|
|
bb6491e10a | ||
|
|
6248ccf376 | ||
|
|
c9e08f36fa | ||
|
|
10b95d753b | ||
|
|
c3989083cf | ||
|
|
01db585094 | ||
|
|
cc67cb330c | ||
|
|
52ed3c5a04 | ||
|
|
5976f6230a | ||
|
|
3553f03a95 | ||
|
|
d6e2d889c3 | ||
|
|
a777b3b450 | ||
|
|
9957efbea0 | ||
|
|
22e7b9730f | ||
|
|
91470b8509 | ||
|
|
c9d5327328 | ||
|
|
1aa61b72e5 | ||
|
|
3ca5edc3fc | ||
|
|
a092ebaeb3 | ||
|
|
5b9e84c255 | ||
|
|
9c058b926f | ||
|
|
4f2d2ae6e8 | ||
|
|
75aa26a018 | ||
|
|
0f795254e5 | ||
|
|
33592f0a83 | ||
|
|
d6fd01eaca | ||
|
|
ee6e0ff26c | ||
|
|
4d9574bf38 | ||
|
|
813be9a2be | ||
|
|
cc76ebfafb | ||
|
|
7989ee0243 | ||
|
|
3aa1997cfd | ||
|
|
c3da15552e | ||
|
|
a014fe9443 | ||
|
|
92551d4ca3 | ||
|
|
8010858e85 | ||
|
|
4efb4875b0 | ||
|
|
c5d041e46d | ||
|
|
53c2223aae | ||
|
|
25034ac0ae | ||
|
|
ac9de72b75 | ||
|
|
1f48ad93f2 | ||
|
|
38f7f7aa00 | ||
|
|
fe8175c63a | ||
|
|
2d9e01bbc1 | ||
|
|
022a227b08 | ||
|
|
a2228259f1 | ||
|
|
a61af7c56f | ||
|
|
5d6a646976 | ||
|
|
628d0d7492 | ||
|
|
b76c8745ec | ||
|
|
51e67bc441 | ||
|
|
8887f75b70 | ||
|
|
9436a838c0 | ||
|
|
ef120fa36f | ||
|
|
8c6385e2c5 | ||
|
|
0bd85d9905 | ||
|
|
ce0dab7b28 | ||
|
|
ddcc5670ce | ||
|
|
86afa184e2 | ||
|
|
77f341f139 | ||
|
|
918b5d99c2 | ||
|
|
7a098d6eff | ||
|
|
71f81283f5 | ||
|
|
058c7c3c33 | ||
|
|
870e33879b | ||
|
|
3ca82bdfc5 | ||
|
|
4721bad286 | ||
|
|
f040cf2f07 | ||
|
|
8d50717c90 | ||
|
|
2512ad3c95 | ||
|
|
bc7e007634 | ||
|
|
1f3c87e0c7 | ||
|
|
4bb255e0bb | ||
|
|
73e08faee9 | ||
|
|
02dc7711e4 | ||
|
|
67b4d80e5b | ||
|
|
5168d2bb39 | ||
|
|
57190a75bf | ||
|
|
f10e865895 | ||
|
|
91b4dc412b | ||
|
|
c896fd8df8 | ||
|
|
72cd987284 | ||
|
|
d868d05080 | ||
|
|
9dfb039a69 | ||
|
|
f2920e877b | ||
|
|
ecb0b3f9d7 | ||
|
|
67c128be69 | ||
|
|
1ecbbc2d4b | ||
|
|
82c481b014 | ||
|
|
e7da6d7897 | ||
|
|
e9f1e3038b | ||
|
|
a591096819 | ||
|
|
f1ef60475f | ||
|
|
ce75bb3984 | ||
|
|
d59235e04c | ||
|
|
42f8f7e58f | ||
|
|
f9cbc9ae27 | ||
|
|
a50d6599bf | ||
|
|
cc578b496e | ||
|
|
662944d246 | ||
|
|
42810df4a5 | ||
|
|
c3a058d2e1 | ||
|
|
ce5d835ae5 | ||
|
|
60dd561729 | ||
|
|
08c9f9ad7d | ||
|
|
d47907906d | ||
|
|
935f0f6e05 | ||
|
|
ac0b21d574 | ||
|
|
9b5d05369f | ||
|
|
489f9f5e59 | ||
|
|
e62f7c23c9 | ||
|
|
91ed7d49b5 | ||
|
|
c9e9abd811 | ||
|
|
b1e5023f62 | ||
|
|
604690b3f5 | ||
|
|
13ada6ecc6 | ||
|
|
b897eb913e | ||
|
|
c25602a650 | ||
|
|
2defc9af3f | ||
|
|
446525389b | ||
|
|
756b30d04f | ||
|
|
51ec842815 | ||
|
|
c38822849e | ||
|
|
3c69201f67 | ||
|
|
ed9d701406 | ||
|
|
e70c5aa2e9 | ||
|
|
0c4589b257 | ||
|
|
84d08392fb | ||
|
|
8ff117308d | ||
|
|
b6c703adbc | ||
|
|
22e6934de5 | ||
|
|
1b8a1d69ac | ||
|
|
b6ae83937b | ||
|
|
7115556663 | ||
|
|
cb3296661e | ||
|
|
6dd20a6df9 | ||
|
|
71c1d0e59a | ||
|
|
2b275e1ff7 | ||
|
|
a7fcae1033 | ||
|
|
19bd189b33 | ||
|
|
2d5089c047 | ||
|
|
be7469bd54 | ||
|
|
146d8daa6e | ||
|
|
f3928d9e09 | ||
|
|
d4090d459d | ||
|
|
7dd7554c08 | ||
|
|
9de9a1d97d | ||
|
|
04ee366fbe | ||
|
|
c8784150fc | ||
|
|
7b7bccb37a | ||
|
|
84e2636bca | ||
|
|
dc73613b56 | ||
|
|
fd8868ef4d | ||
|
|
127df0b8e0 | ||
|
|
c2989df902 | ||
|
|
3f9ee99b69 | ||
|
|
7204c4e804 | ||
|
|
f1131cf8e7 | ||
|
|
5b9a8beb07 | ||
|
|
9e18e35c66 | ||
|
|
9db3dfa955 | ||
|
|
4a3e56d300 | ||
|
|
3bb4125c50 | ||
|
|
ce58883618 | ||
|
|
e7d3c60bac | ||
|
|
08e90139ad | ||
|
|
0d4dc34453 | ||
|
|
fe142c4626 | ||
|
|
d8dfa6017d | ||
|
|
b7a5d4296b | ||
|
|
85d4c1fc24 | ||
|
|
66489d79be | ||
|
|
30a66a26c6 | ||
|
|
fbc3081e68 | ||
|
|
7a66c94907 | ||
|
|
4e38bc5769 | ||
|
|
0dc428dbd6 | ||
|
|
6ac7fc94ea | ||
|
|
af28ed1783 | ||
|
|
00daf084f2 | ||
|
|
5518848e28 | ||
|
|
6ded856b2f | ||
|
|
d302f5132e | ||
|
|
012e29ee3a | ||
|
|
dbe9579d7f | ||
|
|
c8d0221d9b | ||
|
|
885c663d93 |
@@ -2,7 +2,7 @@
|
||||
|
||||
اِنضم إلَى مُجتَمع وأنشئ مِلَفَّكَ التَّعريفِيّ. ابحث عن أشخاص رائعين، تابعهم واقرأ منشوراتهم في خطٍّ زمني خالٍ من الإعلانات. عبِّر عَن نَفسِكَ باِستخدام رُموزٍ تَعبيرِيَّةٍ مُخصَّصَة، أو صُوَر، أو صُوَرٍ مُتحَرِّكَة، أو مَقاطِعٍ مَرئِّيَة أو مَقاطِعٍ صَوتِيَّةٍ فِي مَنشوراتٍ ذَاتُ خَمسِمائَة حَرف. رُدّ على سَلاسِلِ المَنشوراتِ، وأعِد تَدوينَ مَنشُوراتِ أيِّ شَخصٍ لِمُشارَكَةِ الأُمُورِ الرَّائِعَة. اِبحَث عَن حِساباتٍ جَديدَةٍ لِمُتابَعَتِها، وَعَن وُسُومٍ شَائِعَةٍ لِتَوسيعِ شَبَكَتِك.
|
||||
|
||||
ماستودون مبني بتركيز على الأمان والخصوصيَّة. حدِّد ما إذا أردتَ مُشارَكَةَ مَنشُوراتِكَ مَعَ مُتابِعيك، أو الأشخاصِ الَّذينَ أشَرتَ إليهِم فَقَط أو العالَمَ بأسرِه. تتيح لك تحذيرات المحتوى إخفاء المنشورات التي تحتوي على مواد حساسة أو محفِّزَة حتى تكون مستعد للتفاعل مع محتواها. لكل مجتمع إرشاداته الخاصة ومشرفيه الخاصين للحفاظ على أمان أعضائه، كما تُساعد أدوات الحظر والإبلاغ القوية في منع إساءة الاستخدام.
|
||||
ماستدون مبني بتركيزٍ على الأمان والخصوصيَّة. حدِّد ما إذا أردتَ مُشارَكَةَ مَنشُوراتِكَ مَعَ مُتابِعيك، أو الأشخاصِ الَّذينَ أشَرتَ إليهِم فَقَط أو العالَمَ بأسرِه. تتيح لك تحذيرات المحتوى إخفاء المنشورات التي تحتوي على مواد حساسة أو محفِّزَة حتى تكون مستعد للتفاعل مع محتواها. لكل مجتمع إرشاداته الخاصة ومشرفيه الخاصين للحفاظ على أمان أعضائه، كما تُساعد أدوات الحظر والإبلاغ القوية في منع إساءة الاستخدام.
|
||||
|
||||
مَزيدٌ مِنَ المَزايَا:
|
||||
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
Mastodon er det største decentraliserede sociale netværk på internettet. I stedet for et enkelt website, er det et netværk af millioner af brugere i uafhængige fællesskaber som alle sammen kan interagere med hinanden. Uanset hvad du interesserer dig for, kan du møde engagerede mennesker som skriver om det på Mastodon!
|
||||
Mastodon er det største decentraliserede sociale netværk på internet. Frem for ét enkelt website, er det i stedet et netværk af millioner af brugere i uafhængige fællesskaber, som alle kan interagere med hinanden. Uanset interessesfære, kan man møde engagerede personer, som skriver herom på Mastodon!
|
||||
|
||||
Find et fællesskab og opret din profil. Find og følg fascinerende mennesker og læs deres indlæg i en reklamefri, kronologisk tidslinje. Udtryk dig selv med emojis, billeder, GIFs, videoer og lyd i indlæg på op til 500 tegn. Svar på tråde og del alt det gode ved at booste indlæg fra andre. Find nye brugere at følge og aktuelle hashtags så dit netværk udvides.
|
||||
Find et fællesskab og opret din profil. Find og følg fascinerende folk og læs deres indlæg i en reklamefri, kronologisk tidslinje. Udtryk dig selv med tilpassede emojis, billeder, GIF'er, videoer og lyd i 500-tegns indlæg. Svar på tråde og genpost indlæg fra enhver for dele alt det gode. Find nye konti at følge, og populære hashtags, for at udvide dit netværk.
|
||||
|
||||
Mastodon er bygget med fokus på privatliv og sikkerhed. Beslut om dine indlæg skal deles med dine følgere, bare dem du nævner eller hele verden. Indholdsadvarsler giver dig mulighed for at gemme indlæg med sensitivt eller triggende indhold indtil du er klar til at læse dem. Hvert fællesskab har sine egne regler og moderatorer som holder øje og sikrer medlemmerne mod spam og trolde. De har robuste blokerings- og rapporteringsredskaber til deres rådighed.
|
||||
Mastodon er bygget med fokus på fortrolighed og sikkerhed. Afgør, hvorvidt dine indlæg skal deles med Følgere, blot dem du nævner eller hele verden. Indholdsadvarsler muliggør at skjule indlæg med sensitivt eller udløsende indhold, indtil du er klar til at læse dem. Hvert fællesskab har deres egne retningslinjer og moderatorer til at holde deres medlemmer sikre, og robuste blokerings- og anmeldelsesværktøjer hjælper med at forhindre misbrug.
|
||||
|
||||
Flere funktioner:
|
||||
|
||||
• Mørk Mode: Læs indlæg i lys, mørk eller ægte sort tilstand
|
||||
• Afstemninger: Spørg tilhængere om deres mening og stemme
|
||||
• Udforsk: Populære hashtags og konti er et tryk væk
|
||||
• Notifikationer: Få besked om nye følgere, svar og boosts
|
||||
• Deling: Send direkte til Mastodon fra en hvilken som app
|
||||
• Nuttethedsfaktor: Vores maskot er en yndig elefant, og du vil se dem dukke op fra tid til anden
|
||||
• Mørk tilstand: Læs indlæg i lys, mørk eller ægte sort tilstand
|
||||
• Afstemninger: Spørg Følgere om deres mening og stemme
|
||||
• Udforsk: Populære hashtags og konti er ét tryk væk
|
||||
• Notifikationer: Få besked om nye Følgere, svar og genpostninger
|
||||
• Deling: Post direkte til Mastodon fra enhver apps delingsfunktion
|
||||
• Nuttethed: Vores maskot er en yndig elefant, som du vil se dukke op fra tid til anden
|
||||
|
||||
Mastodon er en registreret nonprofit og udvikling understøttes direkte af dine donationer. Der er ingen reklame, ingen indtægtsgenerering og ingen risikovillig kapital, og sådan forbliver det.
|
||||
Mastodon er en registreret nonprofit, hvis udvikling direkte understøttes af dine donationer. Der er ingen annoncering, ingen indtægtsgenerering og ingen risikovillig kapital, og intentionen er, at det forbliver sådan.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
Mastodon Interneteko sare sozial deszentralizatu handiena da. Webgune bakar bat izan ordez, beren artean elkarreragin dezaketen komunitate independenteetako milioika erabiltzailek osatutako sarea da. Zure interesak direnak direla ere, jende interesgarria aurkituko duzu Mastodonen!
|
||||
|
||||
Batu komunitate batera eta sortu zure profila. Find and follow fascinating folks and read their posts in an ad-free, chronological timeline. Adierazi nahi duzuna 500 karaktereko bidalketetan emoji pertsonalizatuak, irudiak, GIFak, bideoak eta audioak erabiliz. Erantzun edozeinen hariak eta eman bultzada bidalketei edukiak partekatzeko. Bilatu jarraitzeko kontu berriak eta traolen joerak zure sarea zabaltzeko.
|
||||
Batu komunitate batera eta sortu zure profila. Bilatu eta jarraitu jende zoragarria eta irakurri beren bidalketak, publizitaterik gabeko denbora-lerro kronologikoan. Adierazi nahi duzuna 500 karaktereko bidalketetan emoji pertsonalizatuak, irudiak, GIFak, bideoak eta audioak erabiliz. Erantzun edozeinen hariak eta eman bultzada bidalketei edukiak partekatzeko. Bilatu jarraitzeko kontu berriak eta traolen joerak zure sarea zabaltzeko.
|
||||
|
||||
Mastodon pribatutasunean eta segurtasunean arreta jarriz eraikia dago. Erabaki zure bidalketak norekin partekatu: zure jarraitzaileekin, aipatzen dituzunekin edo mundu osoarekin. Edukiaren abisuek aukera ematen dute eduki sentibera edo zuregan eragina izan dezaketen bidalketak zuk erabaki arte ezkutatzeko. Komunitate bakoitzak bere gidalerro eta moderatzaileak ditu, bertako kideak seguru mantentzeko. Baita blokeatzeko eta salatzeko tresna sendoak ere abusuak galarazteko.
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
Մաստոդոնը համացանցի ամենամեծ ապակենտրոնացված սոցցանցն է։ Instead of a single website, it’s a network of millions of users in independent communities that can all interact with one another, seamlessly. No matter what you’re into, you can meet passionate people posting about it on Mastodon!
|
||||
Մաստոդոնը համացանցի ամենամեծ ապակենտրոնացված սոցցանցն է։ Այն մի կայք չէ, այլ իրար հետ կապակցված անկախ համայնքների միլիոնավոր օգտատերերից կազմված ցանց։ No matter what you’re into, you can meet passionate people posting about it on Mastodon!
|
||||
|
||||
Join a community and create your profile. Find and follow fascinating folks and read their posts in an ad-free, chronological timeline. Express yourself with custom emoji, images, GIFs, videos, and audio in 500-character posts. Reply to threads and reblog posts from anyone to share great stuff. Find new accounts to follow and trending hashtags to expand your network.
|
||||
Միացեք համայնքին և ստեղծեք հաշիվ։ Find and follow fascinating folks and read their posts in an ad-free, chronological timeline. Express yourself with custom emoji, images, GIFs, videos, and audio in 500-character posts. Reply to threads and reblog posts from anyone to share great stuff. Find new accounts to follow and trending hashtags to expand your network.
|
||||
|
||||
Mastodon is built with a focus on privacy and safety. Decide whether your posts are shared with your followers, just the people you mention, or the whole world. Content warnings let you hide posts containing sensitive or triggering material until you're ready to engage with them. Each community has its own guidelines and moderators to keep its members safe, and robust blocking and reporting tools help prevent abuse.
|
||||
Mastodon is built with a focus on privacy and safety. Decide whether your posts are shared with your followers, just the people you mention, or the whole world. Զգայուն կամ հրահրող թեմաներով գրառումները կարելի է թաքցնել նախազգուշացումներով։ Each community has its own guidelines and moderators to keep its members safe, and robust blocking and reporting tools help prevent abuse.
|
||||
|
||||
Ավելին՝
|
||||
|
||||
• Մուգ տարբերակ՝ կարդացեք գրառումներ մուգ, բաց կամ իսկական սև տարբերակներում
|
||||
• Հարցումներ՝ իմացեք ձեր հետևորդների կարծիքը և հաշվեք քվեները
|
||||
• Հարցումներ՝ իմացեք ձեր հետևորդների կարծիքը և հաշվեք ձայները
|
||||
• Explore: Trending hashtags and accounts are a tap away
|
||||
• Notifications: Get notified about new follows, replies, and reblogs
|
||||
• Sharing: Post directly to Mastodon from any share sheet in any app
|
||||
• Cuteness: Our mascot is an adorable elephant, and you'll see them pop up from time to time
|
||||
|
||||
Mastodon is a registered nonprofit and development is supported directly by your donations. There’s no advertising, no monetization, and no venture capital, and we plan to keep it that way.
|
||||
Մաստոդոնը գրանցված շահույթ չհետապնդող կազմակերպություն է, և աջակցվում է ձեր նվիրաբերություններով։ There’s no advertising, no monetization, and no venture capital, and we plan to keep it that way.
|
||||
|
||||
@@ -1 +1 @@
|
||||
Decentralized social network
|
||||
Ապակենտրոնացված սոցիալական ցանց
|
||||
@@ -1,6 +1,6 @@
|
||||
Mastodon adalah jejaring sosial terdesentralisasi terbesar di internet. Daripada sebuah satu situs web, ini adalah jaringan dari jutaan pengguna dalam komunitas tersendiri yang dapat berinteraksi antar sesama, tanpa masalah. Tanpa memedulikan apa yang Anda minat, Anda dapat bertemu orang-orang yang mengirimkan apa yang mereka minat di Mastodon!
|
||||
Mastodon dalah jaringan sosial terdesentralisasi terbesar di internet. Bukan hanya satu situs web, ini adalah jaringan dari jutaan pengguna dalam komunitas tersendiri yang dapat saling interaksi antar sesama, tanpa batasan. Apapun yang kamu minati, kamu dapat bertemu orang-orang baru yang mengirimkan apa yang mereka minati di Mastodon!
|
||||
|
||||
Bergabung sebuah komunitas dan buat profil Anda. Temukan dan ikuti orang-orang yang menarik dan baca postingan mereka dalam lini masa yang kronologis dan bebas iklan. Ekspresikan diri Anda dengan emoji kustom, gambar, GIF, video, dan audio dalam kiriman dengan batasan 500 karakter. Balas ke utasan dan bagikan kiriman dari siapa pun ke pengikut Anda untuk membagikan hal-hal yang keren. Temukan akun baru untuk diikuti dan tagar yang sedang tren untuk memperluas jejaring Anda.
|
||||
Bergabunglah dalam sebuah komunitas dan buat profil kalian. Temukan dan ikuti orang-orang yang menarik dan baca postingan mereka dalam linimasa yang kronologis serta bebas iklan. Ekspresikan diri Anda dengan emoji kustom, gambar, GIF, video, dan audio dalam kiriman dengan batasan 500 karakter. Balas ke utasan dan bagikan kiriman dari siapa pun ke pengikut Anda untuk membagikan hal-hal yang keren. Temukan akun baru untuk diikuti dan tagar yang sedang tren untuk memperluas jejaring Anda.
|
||||
|
||||
Mastodon dibuat dengan fokus pada privasi dan keamanan. Tentukan apakah kiriman Anda dibagikan kepada pengikut, hanya orang yang disebut, atau seluruh dunia. Peringatan konten memungkinkan Anda untuk menyembunyikan kiriman yang berisi material sensitif atau memicu sampai Anda siap untuk terlibat dengan mereka. Setiap komunitas memiliki pedoman dan moderator sendiri-sendiri untuk menjaga anggotanya aman, dan alat pemblokiran dan pelaporan yang kokoh membantu mencegah pelecehan.
|
||||
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
Mastodonは、インターネット上で最大の分散型ソーシャルネットワークです。 Mastodonは単一のウェブサイトではなく、それぞれ独立したコミュニティに参加している何百万人ものユーザーによって構成されたネットワークなのです。ユーザーたちはその中で、誰もがお互いとシームレスにやり取りできます。 あなたの興味関心がどんな分野にあっても、きっとMastodonのどこかで同じ情熱を投稿している仲間がいることでしょう。
|
||||
Mastodon は、インターネット上で最大の分散型ソーシャルネットワークです。 Mastodon は単一のウェブサイトではなく、それぞれ独立したコミュニティに参加している何百万人ものユーザーによって構成されたネットワークなのです。ユーザーたちはその中で、誰もがお互いとシームレスにやり取りできます。 あなたの興味関心がどんな分野にあっても、きっと Mastodon のどこかで同じ情熱を投稿している仲間がいることでしょう。
|
||||
|
||||
まずはコミュニティに参加して、自分のプロフィールを作成しましょう。 魅力的なユーザーを見つけたら、フォローしてタイムラインで投稿を見てみましょう。タイムラインに広告は出てきません。順番も時系列順です。 そして、500文字まで使える投稿で自分を表現してみましょう。カスタム絵文字や画像、GIF、動画、音声も使用できます。 スレッドに返事したり、他の誰かの面白い投稿をブーストして共有したりすることもできます。 興味のあるアカウントとホットなハッシュタグをどんどん見つけて、あなた自身のネットワークを広げていきましょう。
|
||||
まずはコミュニティに参加して、自分のプロフィールを作成しましょう。 魅力的なユーザーを見つけたら、フォローしてタイムラインで投稿を見てみましょう。タイムラインに広告は出てきません。順番も時系列順です。 そして、500 文字まで使える投稿で自分を表現してみましょう。カスタム絵文字や画像、GIF、動画、音声も使用できます。 スレッドに返事したり、他の誰かの面白い投稿をブーストして共有したりすることもできます。 興味のあるアカウントとホットなハッシュタグをどんどん見つけて、あなた自身のネットワークを広げていきましょう。
|
||||
|
||||
Mastondonはプライバシーと安全性を重視しています。 自分の投稿をフォロワーだけに限定公開にするのか、メンションした特定のユーザーだけに共有するのか、全世界に放流するのか、自由に決められます。 また、入力中の投稿について「ちょっとセンシティブな内容だな」と思ったら、閲覧注意機能で内容を伏せることで、見たくない人に配慮した投稿が作成できます。 そして、各コミュニティにはそれぞれのガイドラインと管理者・モデレーターが存在し、コミュニティメンバーの安全を守っています。強力なブロック・通報機能も、不正利用の防止をお手伝いします。
|
||||
Mastondon はプライバシーと安全性を重視しています。 自分の投稿をフォロワーだけに限定公開にするのか、メンションした特定のユーザーだけに共有するのか、全世界に放流するのか、自由に決められます。 また、入力中の投稿について「ちょっとセンシティブな内容だな」と思ったら、閲覧注意機能で内容を伏せることで、見たくない人に配慮した投稿が作成できます。 そして、各コミュニティにはそれぞれのガイドラインと管理者・モデレーターが存在し、コミュニティメンバーの安全を守っています。強力なブロック・通報機能も、不正利用の防止をお手伝いします。
|
||||
|
||||
その他の機能:
|
||||
その他の機能:
|
||||
|
||||
• ダークモード対応:ライトモードだけでなく、ダークモードや「真っ黒」モードで投稿を閲覧
|
||||
• 投票機能:フォロワーたちの意見を投票形式で集計
|
||||
• 探索:話題のハッシュタグやアカウントに1タップでアクセス
|
||||
• 通知設定:新しいフォローやリプライ、ブーストがあった時に通知
|
||||
• 共有:どのアプリからでも、「共有」メニューを通じてMastodonへ直接投稿
|
||||
• 癒し:Mastodonが誇る象のマスコット(かわいい)が、画面にお邪魔したり、しなかったり
|
||||
• ダークモード: ライトモードだけでなく、ダークモードや「真っ黒」モードで投稿を閲覧
|
||||
• アンケート: フォロワーたちの意見を投票形式で集計
|
||||
• 探索: 話題のハッシュタグやアカウントに 1 タップでアクセス
|
||||
• 通知: 新しいフォローやリプライ、ブーストがあった時に通知
|
||||
• 共有: どのアプリからでも「共有」メニューを通じて Mastodon へ直接投稿
|
||||
• 癒し: Mastodon が誇る象のマスコット(かわいい)が、画面にお邪魔したり、しなかったり
|
||||
|
||||
Mastodonは公認の非営利アプリです。開発は全てユーザーの寄付から成り立っています。 広告なし、アフィリエイトなし、第三者組織による出資なし。今でも、そしてこれからもそんなアプリであり続けるために、我々は日々努力し続けています。
|
||||
Mastodon は公認の非営利アプリです。開発は全てユーザーの寄付から成り立っています。 広告なし、アフィリエイトなし、第三者組織による出資なし。今でも、そしてこれからもそんなアプリであり続けるために、我々は日々努力し続けています。
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Mastodon เป็นเครือข่ายสังคมแบบกระจายศูนย์ที่ใหญ่ที่สุดบนอินเทอร์เน็ต ซึ่งไม่ได้เป็นเว็บไซต์เดียว แต่เป็นเครือข่ายของผู้ใช้หลายล้านคนในชุมชนอิสระที่ทุกคนสามารถโต้ตอบซึ่งกันและกันได้แบบไร้รอยต่อ ไม่ว่าคุณจะชอบอะไร คุณก็พบคนที่ชื่นชอบเหมือนกันโพสต์เกี่ยวกับสิ่งที่คุณชอบได้บน Mastodon! ซึ่งไม่ได้เป็นเว็บไซต์เดียว แต่เป็นเครือข่ายของผู้ใช้หลายล้านคนในชุมชนอิสระที่ทุกคนสามารถโต้ตอบซึ่งกันและกันได้แบบไร้รอยต่อ ไม่ว่าคุณจะชอบอะไร คุณก็พบคนที่ชื่นชอบเหมือนกันโพสต์เกี่ยวกับสิ่งที่คุณชอบได้บน Mastodon!
|
||||
Mastodon เป็นเครือข่ายสังคมแบบกระจายศูนย์ที่ใหญ่ที่สุดบนอินเทอร์เน็ต ซึ่งไม่ได้เป็นเว็บไซต์เดียว แต่เป็นเครือข่ายของผู้ใช้หลายล้านคนในชุมชนอิสระที่ทุกคนสามารถโต้ตอบซึ่งกันและกันได้แบบไร้รอยต่อ ไม่ว่าคุณจะชอบอะไร คุณก็พบคนที่ชื่นชอบเหมือนกันโพสต์เกี่ยวกับสิ่งที่คุณชอบได้บน Mastodon!
|
||||
|
||||
เข้าร่วมชุมชนและสร้างโปรไฟล์ ค้นหาและติดตามผู้คนที่น่าสนใจและอ่านโพสต์ของเขาในเส้นเวลาที่ไม่มีโฆษณาและเรียงตามลำดับเวลา แสดงความรู้สึกของตัวคุณเองด้วยอีโมจิที่กำหนดเอง รูปภาพ GIF วิดีโอ และเสียงในโพสต์ 500 ตัวอักษร ตอบกลับและดันโพสต์จากคนอื่น ๆ เพื่อแชร์สิ่งดี ๆ และค้นหาบัญชีใหม่ ๆ ที่จะติดตามและแฮชแท็กที่เป็นที่นิยมเพื่อขยายเครือข่ายของคุณ
|
||||
|
||||
@@ -13,4 +13,4 @@ Mastodon สร้างขึ้นโดยเน้นความเป็
|
||||
• การแชร์: โพสต์ลง Mastodon ได้โดยตรงจากแอปอื่น ๆ ที่อยู่ในเครื่อง
|
||||
• ความน่ารัก: มาสคอตของเราเป็นช้างน่ารัก และคุณจะเห็นมันโผล่ออกมาเป็นระยะ ๆ
|
||||
|
||||
Mastodon เป็นองค์กรไม่แสวงหาผลกำไรที่จดทะเบียนแล้ว และการพัฒนาได้รับการสนับสนุนจากเงินบริจาคของคุณโดยตรง ดังนั้นจึงไม่มีโฆษณา ไม่มีการทำกำไร และไม่มีการร่วมลงทุน และเรามีแผนจะทำให้เป็นอย่างนี้ต่อไป ดังนั้นจึงไม่มีโฆษณา ไม่มีการทำกำไร และไม่มีการร่วมลงทุน และเรามีแผนจะทำให้เป็นอย่างนี้ต่อไป
|
||||
Mastodon เป็นองค์กรไม่แสวงหาผลกำไรที่จดทะเบียนแล้ว และการพัฒนาได้รับการสนับสนุนจากเงินบริจาคของคุณโดยตรง ดังนั้นจึงไม่มีโฆษณา ไม่มีการทำกำไร และไม่มีการร่วมลงทุน และเรามีแผนจะทำให้เป็นอย่างนี้ต่อไป
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
Mastodon, internetteki merkezi olmayan en büyük sosyal ağdır. Tek bir web siteye bağlı kalmaksızın, milyonlarca kullanıcının bağımsız olarak birbiri ile kolayca etkileşebileceği bir ağdır. Hangi konuyla ilgili olduğun önemli değil, Mastodon'da onunla ilgili gönderi paylaşan tutkulu insanlarla tanışabilirsin!
|
||||
Mastodon, internetteki merkezi olmayan en büyük sosyal ağdır. Tek bir web siteye bağlı kalmaksızın, milyonlarca kullanıcının bağımsız olarak birbiri ile kolayca etkileşebileceği bir ağdır. Hangi konuyla ilgili olduğunuz önemli değil, Mastodon'da onunla ilgili gönderi paylaşan tutkulu insanlarla tanışabilirsiniz!
|
||||
|
||||
Bir topluluğa katıl ve profilini oluştur. Olağanüstü kişileri bul ve takip et; gönderilerini reklamsız ve kronolojik bir akışta oku. Gönderilerinde 500 karakter sınırlamasıyla kendini emojiler, görseller, GIFler, videolar ve sesler ile ifade et. Harika içerikler paylaşmak için başlıklara yanıt yaz, insanların gönderilerini yeniden paylaş. Ağınızı genişletmek için takip edilecek yeni hesaplar ve hashtagler bul.
|
||||
Bir topluluğa katılın ve profilinizi oluşturun. Olağanüstü kişileri bulun ve takip edin; gönderilerini reklamsız ve kronolojik bir zaman çizelgesinde okuyun. Gönderilerinizde şimdilik 500 karakter sınırlamasıyla kendinizi emojiler, görseller, GIFler, videolar ve sesler ile ifade edin. Harika içerikler paylaşmak için başlıklara yanıt yazın, insanların gönderilerini yineleyin. Ağınızı genişletmek için takip edilecek yeni hesaplar ve hashtagler bulun.
|
||||
|
||||
Mastodon gizlilik ve güvenlik odaklı yapılmıştır. Her postunuz için takipçilerinizle mi, bahsettiğiniz kişilerle mi ya da tüm dünyayla mı paylaşılacağına karar verin. Gönderi uyarıları, hassas ve tetikleyici olabilecek içerikleri kişi görmeyi hazır olana kadar gizler. Her topluluk, üyelerini güvende tutmak için kendi kurallarına ve moderatörlerine; istismarı önlemek için de güçlü engelleme ve bildirme araçlarına sahiptir.
|
||||
Mastodon, mahremiyet ve güvenliğe odaklanılarak inşa edilmiştir. Gönderilerinizi takipçilerinizle mi, sadece bahsettiğiniz kişilerle mi yoksa tüm dünyayla mı paylaşılacağına karar verin. İçerik uyarıları, hassas veya tetikleyici materyal içeren gönderileri, siz onlarla etkileşim kurmaya hazır olana kadar gizlemenize olanak tanır. Her topluluk, üyelerini güvende tutmak için kendi kurallarına ve moderatörlerine; istismarı önlemek için de güçlü engelleme ve bildirme araçlarına sahiptir.
|
||||
|
||||
Diğer özellikler:
|
||||
|
||||
• Koyu Mod: Gönderileri aydınlık, karanlık ya da gerçek karanlık modunda okuyabilirsin
|
||||
• Anketler: Takipçilerine görüşlerini sor ve oylarını gör
|
||||
• Keşfet: Trend hashtagler ve hesaplar bir tık uzağında
|
||||
• Bildirimler: Yeni takipçilerden, yanıtlardan ve yeniden paylaşımlardan haberin olsun
|
||||
• Paylaşım: Doğrudan Mastodon'a herhangi bir tipte gönderi paylaş
|
||||
• Sevimlilik: Maskotumuz şirin bir fil ve onu uygulamada zaman zaman göreceksin
|
||||
• Karanlık Mod: Gönderileri aydınlık, karanlık ya da gerçek karanlık modunda okuyabilirsin
|
||||
• Anketler: Takipçilere fikirlerini sorun ve oylarını görün
|
||||
• Keşfet: Öne çıkan etiketlerler ve hesaplar bir tık uzağınızda
|
||||
• Bildirimler: Yeni takipçilerden, yanıtlardan ve yeniden paylaşımlardan haberiniz olsun
|
||||
• Paylaşım: Doğrudan Mastodon'a herhangi bir türde gönderi paylaş
|
||||
• Sevimlilik: Maskotumuz şirin bir fil ve onu uygulamada zaman zaman göreceksiniz
|
||||
|
||||
Mastodon kar amacı gütmeyen bir kuruluştur ve geliştirilmesi doğrudan bağışlarınızla sağlanmaktadır. Reklam, para kazanma amacı, risk sermayesi yoktur ve bunu böyle tutmayı planlıyoruz.
|
||||
Mastodon kar amacı gütmeyen bir kuruluştur ve geliştirilmesi doğrudan bağışlarınızla sağlanmaktadır. Reklam yok, para kazanma güdüsü yok, risk sermayesi yok ve bu şekilde devam etmeyi planlıyoruz.
|
||||
|
||||
@@ -1 +1 @@
|
||||
Merkezsizleştirilmiş sosyal ağ
|
||||
Merkezi olmayan sosyal ağ
|
||||
@@ -1,16 +1,16 @@
|
||||
Mastodon — найбільша децентралізована соціальна мережа в інтернеті. Замість одного сайту це мережа мільйонів користувачів у незалежних спільнотах, які можуть взаємодіяти один з одним. Незалежно від того, чим ви займаєтеся, ви можете зустріти захоплених людей, які пишуть про це на Mastodon!
|
||||
Mastodon — найбільша децентралізована соціальна мережа в інтернеті. Це не один сайт, а мережа з мільйонів користувачів у незалежних спільнотах, які взаємодіють одна з одною. Незалежно від того, чим ви займаєтеся, ви можете зустріти людей зі спільними інтересами, які пишуть про це на Mastodon!
|
||||
|
||||
Приєднуйтесь до спільноти і створіть свій профіль. Знайдіть і підпишіться на цікавих людей і читайте пости у вільний від реклами стрічці. Виразіть себе за допомогою користувацьких емоджі, зображень, GIF, відео й аудіо з 500-символьними постами. Відповідайте на теми й робіть репости постів від будь-кого, щоб ділитися гарними матеріалами. Знаходьте нові облікові записи, щоб підписатися і популярні хештеги для розширення вашої мережі.
|
||||
Приєднуйтесь до спільноти та створіть свій профіль. Знайдіть і підпишіться на цікавих людей та читайте дописи у вільний від реклами стрічці. Виразіть себе за допомогою користувацьких емоджі, зображень, GIF, відео й аудіо у дописах, обмеженими 500 символами. Відповідайте на теми та поширюйте дописи від будь-кого, щоб ділитися цікавим. Знаходьте нових користувачів, щоб підписатися та слідкуйте за популярними хештегами, щоб розширити свій кругозір.
|
||||
|
||||
Mastodon будується з акцентом на конфіденційність та безпеці. Вирішіть, чи будуть ваші пости тільки для підписників, або для людей, яких ви згадали, чи для цілого світу. Попередження щодо вмісту дозволяють приховати публікації, що містять конфіденційний або провокаційний матеріал, доки ви не будете готові до нього. Кожна спільнота має свої правила і модераторів, щоб залишити учасників в безпеці, а також надійне блокування та інструменти для скарг, щоб запобігти зловживання.
|
||||
Mastodon будується з акцентом на конфіденційність та безпеку. Вирішіть, чи будуть ваші дописи доступні лише підписникам, або для людей, яких ви згадали, чи взагалі для всіх. Попередження про вміст дозволяють приховати дописи, що містять чутливі або провокаційні матеріали, доки ви не будете готові взаємодіяти з ними. Кожна спільнота має власні правила та модераторів, які забезпечують безпеку учасників, а надійні інструменти блокування та система скарг допомагають запобігти зловживанням.
|
||||
|
||||
Більше можливостей:
|
||||
|
||||
• Темна Тема: Читайте у світлій, темній, або справжній чорній темі
|
||||
• Опитування: запитуйте думку підписникіна та підраховуйте голоси
|
||||
Досліджуйте: Популярні Хештеги й Користувачі за одним дотиком
|
||||
• Сповіщення: отримуйте сповіщення про нових підписників, відповіді та репости
|
||||
Діліться: Публікуйте безпосередньо в Mastodon з будь-якого меню "поділитися" в будь-якому додатку
|
||||
• Привабливість: Нашим талісманом є чарівний слон, і ви побачите, як він з'являється час від часу
|
||||
• Темна тема: Читайте дописи у світлому, темному або повністю чорному режимі
|
||||
• Опитування: Запитайте у підписників їхню думку та підраховуйте голоси
|
||||
• Досліджуйте: Популярні хештеги та користувачі на відстані одного дотику
|
||||
• Сповіщення: Отримуйте сповіщення про нові підписки, відповіді та поширення
|
||||
• Діліться: Публікуйте безпосередньо в Mastodon через будь-яке меню "поділитися" у будь-якому додатку
|
||||
• Миле: Наш талісман - чарівне слоненя, яке час від часу ви помічатимете
|
||||
|
||||
Mastodon є зареєстрованою некомерційною організацією і розробка підтримується безпосередньо вашими пожертвуваннями. Тут немає реклами, монетизації та венчурного капіталу, і плануємо так тримати.
|
||||
Mastodon є зареєстрованою некомерційною організацією і розробка підтримується безпосередньо вашими пожертвуваннями. Тут немає реклами, монетизації та венчурного капіталу. І ми плануємо, що так буде й надалі.
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
Mastodon 是互联网上最大的去中心化社交网络。 它不是一个网站,而是由独立社区节点及其数以百万计的用户组成的网络,所有这些用户都能够无缝地相互交流。 无论你进入哪一个节点,你都可以与所有在 Mastodon 的人之间进行交流。 它不是一个网站,而是由独立社区节点及其数以百万计的用户组成的网络,所有这些用户都能够无缝地相互交流。 无论你进入哪一个节点,你都可以与所有在 Mastodon 的人之间进行交流。
|
||||
Mastodon 是互联网上最大的去中心化社交网络。 它不是一个网站,而是由独立社区节点及其数以百万计的用户组成的网络,所有这些用户都能够无缝地相互交流。 无论你关注什么话题,你都能在 Mastodon 上找到兴趣相投的人进行交流。
|
||||
|
||||
加入一个社区节点并创建你的账户。 Find and follow fascinating folks and read their posts in an ad-free, chronological timeline. 用自定义表情、图像、GIF、视频和音频在 500 个字符的帖子里写下你的想法。 回复及转发其他人的帖子来共同分享美好的事物。 寻找新的账户以及热门的话题来拓展你的网络。
|
||||
加入一个社区节点并创建你的账户。 查找、关注有趣的同好,无广告、无时间线干扰地阅读他们的帖子。 借助自定义 emoji、图像、GIF、视频和音频,在最多 500 字的帖文中表达自我。 通过回复或转发其他人的帖文来分享美好的事物。 通过准寻新账户并关注热门话题标签来扩展你的社交网络。
|
||||
|
||||
Mastodon 以隐私和安全为首要目标。 自由选择你的帖子是分享给关注者,或是你提到的人,亦或是整个世界。 内容警告允许让你隐藏可能剧透的内容,让其他人在交互之前做好充分准备。 每个社区都有自己的规则和管理员,让其用户保持安全。通过强有力的屏蔽和举报工具防止滥用。
|
||||
Mastodon 以隐私和安全为首要目标。 你可以自主决定帖文的分享分享对象,可以是你的关注者、你提到的人或是整个世界。 在你做好充足的互动准备之前,内容警告可以隐藏包含敏感或刺激内容的帖文。 每个社区都有自己的规则和管理员来保证其成员安全,同时还有强力的屏蔽和举报工具来避免滥用。
|
||||
|
||||
更多功能:
|
||||
|
||||
• 暗色模式:以浅色、深色、纯黑模式下进行阅读
|
||||
• 暗色模式:在浅色、深色或纯黑模式下阅读帖文
|
||||
• 投票:询问关注者的意见并统计他们的投票
|
||||
• 探索:热门的话题以及账号
|
||||
• 通知:获得新关注、回复和转发的通知
|
||||
• 探索:热门的话题标签及账号只有一触之遥
|
||||
• 通知:获取关注、回复和转发相关的通知提醒
|
||||
• 分享:从其他应用中的分享菜单中直接发布到 Mastodon
|
||||
• 吉祥物:你会不时地看到我们可爱的长毛象
|
||||
|
||||
Mastodon 是一个注册的非营利开发项目,直接由您的捐赠支持。 没有广告,没有商业化,也没有风险资本,我们计划保持这种方式。 没有广告,没有商业化,也没有风险资本,我们计划保持这种方式。
|
||||
Mastodon 是一个直接由用户捐赠支持、已注册非营利开发项目。 它没有广告、没有商业化,也没有风险资本,并且我们也计划保持这种方式。
|
||||
|
||||
279
mastodon/.editorconfig
Normal file
279
mastodon/.editorconfig
Normal file
@@ -0,0 +1,279 @@
|
||||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
indent_size = 4
|
||||
indent_style = tab
|
||||
insert_final_newline = false
|
||||
max_line_length = 300
|
||||
tab_width = 4
|
||||
ij_continuation_indent_size = 8
|
||||
ij_formatter_off_tag = @formatter:off
|
||||
ij_formatter_on_tag = @formatter:on
|
||||
ij_formatter_tags_enabled = false
|
||||
ij_smart_tabs = false
|
||||
ij_visual_guides = none
|
||||
ij_wrap_on_typing = false
|
||||
|
||||
[*.java]
|
||||
ij_java_align_consecutive_assignments = false
|
||||
ij_java_align_consecutive_variable_declarations = false
|
||||
ij_java_align_group_field_declarations = false
|
||||
ij_java_align_multiline_annotation_parameters = false
|
||||
ij_java_align_multiline_array_initializer_expression = false
|
||||
ij_java_align_multiline_assignment = false
|
||||
ij_java_align_multiline_binary_operation = false
|
||||
ij_java_align_multiline_chained_methods = false
|
||||
ij_java_align_multiline_extends_list = false
|
||||
ij_java_align_multiline_for = true
|
||||
ij_java_align_multiline_method_parentheses = false
|
||||
ij_java_align_multiline_parameters = true
|
||||
ij_java_align_multiline_parameters_in_calls = false
|
||||
ij_java_align_multiline_parenthesized_expression = false
|
||||
ij_java_align_multiline_records = true
|
||||
ij_java_align_multiline_resources = true
|
||||
ij_java_align_multiline_ternary_operation = false
|
||||
ij_java_align_multiline_text_blocks = false
|
||||
ij_java_align_multiline_throws_list = false
|
||||
ij_java_align_subsequent_simple_methods = false
|
||||
ij_java_align_throws_keyword = false
|
||||
ij_java_align_types_in_multi_catch = true
|
||||
ij_java_annotation_parameter_wrap = off
|
||||
ij_java_array_initializer_new_line_after_left_brace = false
|
||||
ij_java_array_initializer_right_brace_on_new_line = false
|
||||
ij_java_array_initializer_wrap = off
|
||||
ij_java_assert_statement_colon_on_next_line = false
|
||||
ij_java_assert_statement_wrap = off
|
||||
ij_java_assignment_wrap = off
|
||||
ij_java_binary_operation_sign_on_next_line = false
|
||||
ij_java_binary_operation_wrap = off
|
||||
ij_java_blank_lines_after_anonymous_class_header = 0
|
||||
ij_java_blank_lines_after_class_header = 0
|
||||
ij_java_blank_lines_after_imports = 1
|
||||
ij_java_blank_lines_after_package = 1
|
||||
ij_java_blank_lines_around_class = 1
|
||||
ij_java_blank_lines_around_field = 0
|
||||
ij_java_blank_lines_around_field_in_interface = 0
|
||||
ij_java_blank_lines_around_initializer = 1
|
||||
ij_java_blank_lines_around_method = 1
|
||||
ij_java_blank_lines_around_method_in_interface = 1
|
||||
ij_java_blank_lines_before_class_end = 0
|
||||
ij_java_blank_lines_before_imports = 1
|
||||
ij_java_blank_lines_before_method_body = 0
|
||||
ij_java_blank_lines_before_package = 0
|
||||
ij_java_block_brace_style = end_of_line
|
||||
ij_java_block_comment_add_space = false
|
||||
ij_java_block_comment_at_first_column = true
|
||||
ij_java_builder_methods = none
|
||||
ij_java_call_parameters_new_line_after_left_paren = false
|
||||
ij_java_call_parameters_right_paren_on_new_line = false
|
||||
ij_java_call_parameters_wrap = off
|
||||
ij_java_case_statement_on_separate_line = true
|
||||
ij_java_catch_on_new_line = false
|
||||
ij_java_class_annotation_wrap = split_into_lines
|
||||
ij_java_class_brace_style = end_of_line
|
||||
ij_java_class_count_to_use_import_on_demand = 99
|
||||
ij_java_class_names_in_javadoc = 1
|
||||
ij_java_do_not_indent_top_level_class_members = false
|
||||
ij_java_do_not_wrap_after_single_annotation = false
|
||||
ij_java_do_not_wrap_after_single_annotation_in_parameter = false
|
||||
ij_java_do_while_brace_force = never
|
||||
ij_java_doc_add_blank_line_after_description = true
|
||||
ij_java_doc_add_blank_line_after_param_comments = false
|
||||
ij_java_doc_add_blank_line_after_return = false
|
||||
ij_java_doc_add_p_tag_on_empty_lines = true
|
||||
ij_java_doc_align_exception_comments = true
|
||||
ij_java_doc_align_param_comments = true
|
||||
ij_java_doc_do_not_wrap_if_one_line = false
|
||||
ij_java_doc_enable_formatting = true
|
||||
ij_java_doc_enable_leading_asterisks = true
|
||||
ij_java_doc_indent_on_continuation = false
|
||||
ij_java_doc_keep_empty_lines = true
|
||||
ij_java_doc_keep_empty_parameter_tag = true
|
||||
ij_java_doc_keep_empty_return_tag = true
|
||||
ij_java_doc_keep_empty_throws_tag = true
|
||||
ij_java_doc_keep_invalid_tags = true
|
||||
ij_java_doc_param_description_on_new_line = false
|
||||
ij_java_doc_preserve_line_breaks = false
|
||||
ij_java_doc_use_throws_not_exception_tag = true
|
||||
ij_java_else_on_new_line = false
|
||||
ij_java_enum_constants_wrap = off
|
||||
ij_java_extends_keyword_wrap = off
|
||||
ij_java_extends_list_wrap = off
|
||||
ij_java_field_annotation_wrap = split_into_lines
|
||||
ij_java_finally_on_new_line = false
|
||||
ij_java_for_brace_force = never
|
||||
ij_java_for_statement_new_line_after_left_paren = false
|
||||
ij_java_for_statement_right_paren_on_new_line = false
|
||||
ij_java_for_statement_wrap = off
|
||||
ij_java_generate_final_locals = false
|
||||
ij_java_generate_final_parameters = false
|
||||
ij_java_if_brace_force = never
|
||||
ij_java_imports_layout = android.**,|,com.**,|,junit.**,|,net.**,|,org.**,|,java.**,|,javax.**,|,*,|,$*,|
|
||||
ij_java_indent_case_from_switch = true
|
||||
ij_java_insert_inner_class_imports = false
|
||||
ij_java_insert_override_annotation = true
|
||||
ij_java_keep_blank_lines_before_right_brace = 2
|
||||
ij_java_keep_blank_lines_between_package_declaration_and_header = 2
|
||||
ij_java_keep_blank_lines_in_code = 2
|
||||
ij_java_keep_blank_lines_in_declarations = 2
|
||||
ij_java_keep_builder_methods_indents = false
|
||||
ij_java_keep_control_statement_in_one_line = true
|
||||
ij_java_keep_first_column_comment = true
|
||||
ij_java_keep_indents_on_empty_lines = false
|
||||
ij_java_keep_line_breaks = true
|
||||
ij_java_keep_multiple_expressions_in_one_line = false
|
||||
ij_java_keep_simple_blocks_in_one_line = false
|
||||
ij_java_keep_simple_classes_in_one_line = false
|
||||
ij_java_keep_simple_lambdas_in_one_line = false
|
||||
ij_java_keep_simple_methods_in_one_line = false
|
||||
ij_java_label_indent_absolute = false
|
||||
ij_java_label_indent_size = 0
|
||||
ij_java_lambda_brace_style = end_of_line
|
||||
ij_java_layout_static_imports_separately = true
|
||||
ij_java_line_comment_add_space = false
|
||||
ij_java_line_comment_add_space_on_reformat = false
|
||||
ij_java_line_comment_at_first_column = true
|
||||
ij_java_method_annotation_wrap = split_into_lines
|
||||
ij_java_method_brace_style = end_of_line
|
||||
ij_java_method_call_chain_wrap = off
|
||||
ij_java_method_parameters_new_line_after_left_paren = false
|
||||
ij_java_method_parameters_right_paren_on_new_line = false
|
||||
ij_java_method_parameters_wrap = off
|
||||
ij_java_modifier_list_wrap = false
|
||||
ij_java_multi_catch_types_wrap = normal
|
||||
ij_java_names_count_to_use_import_on_demand = 99
|
||||
ij_java_new_line_after_lparen_in_annotation = false
|
||||
ij_java_new_line_after_lparen_in_record_header = false
|
||||
ij_java_parameter_annotation_wrap = off
|
||||
ij_java_parentheses_expression_new_line_after_left_paren = false
|
||||
ij_java_parentheses_expression_right_paren_on_new_line = false
|
||||
ij_java_place_assignment_sign_on_next_line = false
|
||||
ij_java_prefer_longer_names = true
|
||||
ij_java_prefer_parameters_wrap = false
|
||||
ij_java_record_components_wrap = normal
|
||||
ij_java_repeat_synchronized = true
|
||||
ij_java_replace_instanceof_and_cast = false
|
||||
ij_java_replace_null_check = true
|
||||
ij_java_replace_sum_lambda_with_method_ref = true
|
||||
ij_java_resource_list_new_line_after_left_paren = false
|
||||
ij_java_resource_list_right_paren_on_new_line = false
|
||||
ij_java_resource_list_wrap = off
|
||||
ij_java_rparen_on_new_line_in_annotation = false
|
||||
ij_java_rparen_on_new_line_in_record_header = false
|
||||
ij_java_space_after_closing_angle_bracket_in_type_argument = false
|
||||
ij_java_space_after_colon = true
|
||||
ij_java_space_after_comma = true
|
||||
ij_java_space_after_comma_in_type_arguments = true
|
||||
ij_java_space_after_for_semicolon = true
|
||||
ij_java_space_after_quest = true
|
||||
ij_java_space_after_type_cast = true
|
||||
ij_java_space_before_annotation_array_initializer_left_brace = false
|
||||
ij_java_space_before_annotation_parameter_list = false
|
||||
ij_java_space_before_array_initializer_left_brace = false
|
||||
ij_java_space_before_catch_keyword = false
|
||||
ij_java_space_before_catch_left_brace = false
|
||||
ij_java_space_before_catch_parentheses = false
|
||||
ij_java_space_before_class_left_brace = false
|
||||
ij_java_space_before_colon = true
|
||||
ij_java_space_before_colon_in_foreach = true
|
||||
ij_java_space_before_comma = false
|
||||
ij_java_space_before_do_left_brace = false
|
||||
ij_java_space_before_else_keyword = false
|
||||
ij_java_space_before_else_left_brace = false
|
||||
ij_java_space_before_finally_keyword = false
|
||||
ij_java_space_before_finally_left_brace = false
|
||||
ij_java_space_before_for_left_brace = false
|
||||
ij_java_space_before_for_parentheses = false
|
||||
ij_java_space_before_for_semicolon = false
|
||||
ij_java_space_before_if_left_brace = false
|
||||
ij_java_space_before_if_parentheses = false
|
||||
ij_java_space_before_method_call_parentheses = false
|
||||
ij_java_space_before_method_left_brace = false
|
||||
ij_java_space_before_method_parentheses = false
|
||||
ij_java_space_before_opening_angle_bracket_in_type_parameter = false
|
||||
ij_java_space_before_quest = true
|
||||
ij_java_space_before_switch_left_brace = false
|
||||
ij_java_space_before_switch_parentheses = false
|
||||
ij_java_space_before_synchronized_left_brace = false
|
||||
ij_java_space_before_synchronized_parentheses = false
|
||||
ij_java_space_before_try_left_brace = false
|
||||
ij_java_space_before_try_parentheses = false
|
||||
ij_java_space_before_type_parameter_list = false
|
||||
ij_java_space_before_while_keyword = false
|
||||
ij_java_space_before_while_left_brace = false
|
||||
ij_java_space_before_while_parentheses = false
|
||||
ij_java_space_inside_one_line_enum_braces = false
|
||||
ij_java_space_within_empty_array_initializer_braces = false
|
||||
ij_java_space_within_empty_method_call_parentheses = false
|
||||
ij_java_space_within_empty_method_parentheses = false
|
||||
ij_java_spaces_around_additive_operators = false
|
||||
ij_java_spaces_around_annotation_eq = true
|
||||
ij_java_spaces_around_assignment_operators = false
|
||||
ij_java_spaces_around_bitwise_operators = false
|
||||
ij_java_spaces_around_equality_operators = false
|
||||
ij_java_spaces_around_lambda_arrow = false
|
||||
ij_java_spaces_around_logical_operators = true
|
||||
ij_java_spaces_around_method_ref_dbl_colon = false
|
||||
ij_java_spaces_around_multiplicative_operators = false
|
||||
ij_java_spaces_around_relational_operators = false
|
||||
ij_java_spaces_around_shift_operators = false
|
||||
ij_java_spaces_around_type_bounds_in_type_parameters = true
|
||||
ij_java_spaces_around_unary_operator = false
|
||||
ij_java_spaces_within_angle_brackets = false
|
||||
ij_java_spaces_within_annotation_parentheses = false
|
||||
ij_java_spaces_within_array_initializer_braces = false
|
||||
ij_java_spaces_within_braces = false
|
||||
ij_java_spaces_within_brackets = false
|
||||
ij_java_spaces_within_cast_parentheses = false
|
||||
ij_java_spaces_within_catch_parentheses = false
|
||||
ij_java_spaces_within_for_parentheses = false
|
||||
ij_java_spaces_within_if_parentheses = false
|
||||
ij_java_spaces_within_method_call_parentheses = false
|
||||
ij_java_spaces_within_method_parentheses = false
|
||||
ij_java_spaces_within_parentheses = false
|
||||
ij_java_spaces_within_record_header = false
|
||||
ij_java_spaces_within_switch_parentheses = false
|
||||
ij_java_spaces_within_synchronized_parentheses = false
|
||||
ij_java_spaces_within_try_parentheses = false
|
||||
ij_java_spaces_within_while_parentheses = false
|
||||
ij_java_special_else_if_treatment = true
|
||||
ij_java_subclass_name_suffix = Impl
|
||||
ij_java_ternary_operation_signs_on_next_line = false
|
||||
ij_java_ternary_operation_wrap = off
|
||||
ij_java_test_name_suffix = Test
|
||||
ij_java_throws_keyword_wrap = off
|
||||
ij_java_throws_list_wrap = off
|
||||
ij_java_use_external_annotations = false
|
||||
ij_java_use_fq_class_names = false
|
||||
ij_java_use_relative_indents = false
|
||||
ij_java_use_single_class_imports = true
|
||||
ij_java_variable_annotation_wrap = off
|
||||
ij_java_visibility = public
|
||||
ij_java_while_brace_force = never
|
||||
ij_java_while_on_new_line = false
|
||||
ij_java_wrap_comments = false
|
||||
ij_java_wrap_first_method_in_call_chain = false
|
||||
ij_java_wrap_long_lines = false
|
||||
|
||||
[{*.ant,*.fxml,*.jhm,*.jnlp,*.jrxml,*.rng,*.tld,*.wsdl,*.xml,*.xsd,*.xsl,*.xslt,*.xul}]
|
||||
ij_continuation_indent_size = 4
|
||||
ij_xml_align_attributes = false
|
||||
ij_xml_align_text = false
|
||||
ij_xml_attribute_wrap = normal
|
||||
ij_xml_block_comment_add_space = false
|
||||
ij_xml_block_comment_at_first_column = true
|
||||
ij_xml_keep_blank_lines = 2
|
||||
ij_xml_keep_indents_on_empty_lines = false
|
||||
ij_xml_keep_line_breaks = false
|
||||
ij_xml_keep_line_breaks_in_text = true
|
||||
ij_xml_keep_whitespaces = false
|
||||
ij_xml_keep_whitespaces_around_cdata = preserve
|
||||
ij_xml_keep_whitespaces_inside_cdata = false
|
||||
ij_xml_line_comment_at_first_column = true
|
||||
ij_xml_space_after_tag_name = false
|
||||
ij_xml_space_around_equals_in_attribute = false
|
||||
ij_xml_space_inside_empty_tag = true
|
||||
ij_xml_text_wrap = normal
|
||||
ij_xml_use_custom_settings = true
|
||||
@@ -9,8 +9,8 @@ android {
|
||||
applicationId "org.joinmastodon.android"
|
||||
minSdk 23
|
||||
targetSdk 33
|
||||
versionCode 60
|
||||
versionName "2.0.0"
|
||||
versionCode 71
|
||||
versionName "2.1.5"
|
||||
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.8'
|
||||
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'
|
||||
|
||||
@@ -42,40 +42,7 @@ public class MainActivity extends FragmentStackActivity{
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
if(savedInstanceState==null){
|
||||
if(AccountSessionManager.getInstance().getLoggedInAccounts().isEmpty()){
|
||||
showFragmentClearingBackStack(new SplashFragment());
|
||||
}else{
|
||||
AccountSessionManager.getInstance().maybeUpdateLocalInfo();
|
||||
AccountSession session;
|
||||
Bundle args=new Bundle();
|
||||
Intent intent=getIntent();
|
||||
if(intent.getBooleanExtra("fromNotification", false)){
|
||||
String accountID=intent.getStringExtra("accountID");
|
||||
try{
|
||||
session=AccountSessionManager.getInstance().getAccount(accountID);
|
||||
if(!intent.hasExtra("notification"))
|
||||
args.putString("tab", "notifications");
|
||||
}catch(IllegalStateException x){
|
||||
session=AccountSessionManager.getInstance().getLastActiveAccount();
|
||||
}
|
||||
}else{
|
||||
session=AccountSessionManager.getInstance().getLastActiveAccount();
|
||||
}
|
||||
args.putString("account", session.getID());
|
||||
Fragment fragment=session.activated ? new HomeFragment() : new AccountActivationFragment();
|
||||
fragment.setArguments(args);
|
||||
showFragmentClearingBackStack(fragment);
|
||||
if(intent.getBooleanExtra("fromNotification", false) && intent.hasExtra("notification")){
|
||||
Notification notification=Parcels.unwrap(intent.getParcelableExtra("notification"));
|
||||
showFragmentForNotification(notification, session.getID());
|
||||
}else if(intent.getBooleanExtra("compose", false)){
|
||||
showCompose();
|
||||
}else if(Intent.ACTION_VIEW.equals(intent.getAction())){
|
||||
handleURL(intent.getData(), null);
|
||||
}else{
|
||||
maybeRequestNotificationsPermission();
|
||||
}
|
||||
}
|
||||
restartHomeFragment();
|
||||
}
|
||||
|
||||
if(BuildConfig.BUILD_TYPE.startsWith("appcenter")){
|
||||
@@ -136,7 +103,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){
|
||||
@@ -200,4 +167,41 @@ public class MainActivity extends FragmentStackActivity{
|
||||
requestPermissions(new String[]{Manifest.permission.POST_NOTIFICATIONS}, 100);
|
||||
}
|
||||
}
|
||||
|
||||
public void restartHomeFragment(){
|
||||
if(AccountSessionManager.getInstance().getLoggedInAccounts().isEmpty()){
|
||||
showFragmentClearingBackStack(new SplashFragment());
|
||||
}else{
|
||||
AccountSessionManager.getInstance().maybeUpdateLocalInfo();
|
||||
AccountSession session;
|
||||
Bundle args=new Bundle();
|
||||
Intent intent=getIntent();
|
||||
if(intent.getBooleanExtra("fromNotification", false)){
|
||||
String accountID=intent.getStringExtra("accountID");
|
||||
try{
|
||||
session=AccountSessionManager.getInstance().getAccount(accountID);
|
||||
if(!intent.hasExtra("notification"))
|
||||
args.putString("tab", "notifications");
|
||||
}catch(IllegalStateException x){
|
||||
session=AccountSessionManager.getInstance().getLastActiveAccount();
|
||||
}
|
||||
}else{
|
||||
session=AccountSessionManager.getInstance().getLastActiveAccount();
|
||||
}
|
||||
args.putString("account", session.getID());
|
||||
Fragment fragment=session.activated ? new HomeFragment() : new AccountActivationFragment();
|
||||
fragment.setArguments(args);
|
||||
showFragmentClearingBackStack(fragment);
|
||||
if(intent.getBooleanExtra("fromNotification", false) && intent.hasExtra("notification")){
|
||||
Notification notification=Parcels.unwrap(intent.getParcelableExtra("notification"));
|
||||
showFragmentForNotification(notification, session.getID());
|
||||
}else if(intent.getBooleanExtra("compose", false)){
|
||||
showCompose();
|
||||
}else if(Intent.ACTION_VIEW.equals(intent.getAction())){
|
||||
handleURL(intent.getData(), null);
|
||||
}else{
|
||||
maybeRequestNotificationsPermission();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -24,6 +24,7 @@ import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
@@ -86,6 +87,9 @@ public class MastodonAPIController{
|
||||
synchronized(req){
|
||||
req.okhttpCall=call;
|
||||
}
|
||||
if(req.timeout>0){
|
||||
call.timeout().timeout(req.timeout, TimeUnit.MILLISECONDS);
|
||||
}
|
||||
|
||||
if(BuildConfig.DEBUG)
|
||||
Log.d(TAG, "["+(session==null ? "no-auth" : session.getID())+"] Sending request: "+hreq);
|
||||
|
||||
@@ -45,6 +45,7 @@ public abstract class MastodonAPIRequest<T> extends APIRequest<T>{
|
||||
Token token;
|
||||
boolean canceled;
|
||||
Map<String, String> headers;
|
||||
long timeout;
|
||||
private ProgressDialog progressDialog;
|
||||
protected boolean removeUnsupportedItems;
|
||||
|
||||
@@ -127,6 +128,10 @@ public abstract class MastodonAPIRequest<T> extends APIRequest<T>{
|
||||
headers.put(key, value);
|
||||
}
|
||||
|
||||
protected void setTimeout(long timeout){
|
||||
this.timeout=timeout;
|
||||
}
|
||||
|
||||
protected String getPathPrefix(){
|
||||
return "/api/v1";
|
||||
}
|
||||
|
||||
@@ -87,7 +87,6 @@ public class PushSubscriptionManager{
|
||||
private String accountID;
|
||||
private PrivateKey privateKey;
|
||||
private PublicKey publicKey;
|
||||
private PublicKey serverKey;
|
||||
private byte[] authKey;
|
||||
|
||||
public PushSubscriptionManager(String accountID){
|
||||
@@ -162,10 +161,6 @@ public class PushSubscriptionManager{
|
||||
@Override
|
||||
public void onSuccess(PushSubscription result){
|
||||
MastodonAPIController.runInBackground(()->{
|
||||
result.serverKey=result.serverKey.replace('/','_');
|
||||
result.serverKey=result.serverKey.replace('+','-');
|
||||
serverKey=deserializeRawPublicKey(Base64.decode(result.serverKey, Base64.URL_SAFE));
|
||||
|
||||
AccountSession session=AccountSessionManager.getInstance().tryGetAccount(accountID);
|
||||
if(session==null)
|
||||
return;
|
||||
|
||||
@@ -4,21 +4,22 @@ import org.joinmastodon.android.api.MastodonAPIRequest;
|
||||
import org.joinmastodon.android.model.Token;
|
||||
|
||||
public class RegisterAccount extends MastodonAPIRequest<Token>{
|
||||
public RegisterAccount(String username, String email, String password, String locale, String reason){
|
||||
public RegisterAccount(String username, String email, String password, String locale, String reason, String timezone){
|
||||
super(HttpMethod.POST, "/accounts", Token.class);
|
||||
setRequestBody(new Body(username, email, password, locale, reason));
|
||||
setRequestBody(new Body(username, email, password, locale, reason, timezone));
|
||||
}
|
||||
|
||||
private static class Body{
|
||||
public String username, email, password, locale, reason;
|
||||
public String username, email, password, locale, reason, timeZone;
|
||||
public boolean agreement=true;
|
||||
|
||||
public Body(String username, String email, String password, String locale, String reason){
|
||||
public Body(String username, String email, String password, String locale, String reason, String timeZone){
|
||||
this.username=username;
|
||||
this.email=email;
|
||||
this.password=password;
|
||||
this.locale=locale;
|
||||
this.reason=reason;
|
||||
this.timeZone=timeZone;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
package org.joinmastodon.android.api.requests.catalog;
|
||||
|
||||
import android.net.Uri;
|
||||
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
|
||||
import org.joinmastodon.android.api.MastodonAPIRequest;
|
||||
import org.joinmastodon.android.model.catalog.CatalogDefaultInstance;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class GetCatalogDefaultInstances extends MastodonAPIRequest<List<CatalogDefaultInstance>>{
|
||||
public GetCatalogDefaultInstances(){
|
||||
super(HttpMethod.GET, null, new TypeToken<>(){});
|
||||
setTimeout(500);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Uri getURL(){
|
||||
return Uri.parse("https://api.joinmastodon.org/default-servers");
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -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){
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -279,7 +279,7 @@ public class AccountSessionManager{
|
||||
}
|
||||
}
|
||||
|
||||
private void updateSessionLocalInfo(AccountSession session){
|
||||
/*package*/ void updateSessionLocalInfo(AccountSession session){
|
||||
new GetOwnAccount()
|
||||
.setCallback(new Callback<>(){
|
||||
@Override
|
||||
|
||||
@@ -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){
|
||||
|
||||
@@ -109,7 +109,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
|
||||
private static final Pattern MENTION_PATTERN=Pattern.compile("(^|[^\\/\\w])@(([a-z0-9_]+)@[a-z0-9\\.\\-]+[a-z0-9]+)", Pattern.CASE_INSENSITIVE);
|
||||
|
||||
// from https://github.com/mastodon/mastodon-ios/blob/main/Mastodon/Helper/MastodonRegex.swift
|
||||
private static final Pattern AUTO_COMPLETE_PATTERN=Pattern.compile("(?<!\\w)(?:@([a-zA-Z0-9_]+)(@[a-zA-Z0-9_.-]+)?|#([^\\s.]+)|:([a-zA-Z0-9_]+))");
|
||||
private static final Pattern AUTO_COMPLETE_PATTERN=Pattern.compile("(?<!\\w)(?:@([a-z0-9_]+)(@[a-z0-9_\\.\\-]*)?|#([^\\s.]+)|:([a-z0-9_]+))", Pattern.CASE_INSENSITIVE);
|
||||
private static final Pattern HIGHLIGHT_PATTERN=Pattern.compile("(?<!\\w)(?:@([a-zA-Z0-9_]+)(@[a-zA-Z0-9_.-]+)?|#([^\\s.]+))");
|
||||
|
||||
@SuppressLint("NewApi") // this class actually exists on 6.0
|
||||
@@ -252,7 +252,8 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
|
||||
selfAvatar=view.findViewById(R.id.avatar);
|
||||
HtmlParser.setTextWithCustomEmoji(selfName, self.displayName, self.emojis);
|
||||
selfUsername.setText('@'+self.username+'@'+instanceDomain);
|
||||
ViewImageLoader.load(selfAvatar, null, new UrlImageLoaderRequest(self.avatar));
|
||||
if(self.avatar!=null)
|
||||
ViewImageLoader.load(selfAvatar, null, new UrlImageLoaderRequest(self.avatar));
|
||||
ViewOutlineProvider roundCornersOutline=new ViewOutlineProvider(){
|
||||
@Override
|
||||
public void getOutline(View view, Outline outline){
|
||||
@@ -451,7 +452,6 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
|
||||
char prevChar=spanStart>0 ? editable.charAt(spanStart-1) : ' ';
|
||||
if(!matcher.find() || !Character.isWhitespace(prevChar)){ // invalid mention, remove
|
||||
editable.removeSpan(span);
|
||||
continue;
|
||||
}else if(matcher.end()+spanStart<spanEnd){ // mention with something at the end, move the end offset
|
||||
editable.setSpan(span, spanStart, spanStart+matcher.end(), Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
|
||||
}
|
||||
@@ -547,7 +547,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item){
|
||||
if(item.getItemId()==R.id.publish){
|
||||
if(GlobalUserPreferences.altTextReminders)
|
||||
if(GlobalUserPreferences.altTextReminders && editingStatus==null)
|
||||
checkAltTextsAndPublish();
|
||||
else
|
||||
publish();
|
||||
@@ -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);
|
||||
@@ -961,6 +965,8 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
|
||||
}
|
||||
|
||||
private void updateVisibilityIcon(){
|
||||
if(getActivity()==null)
|
||||
return;
|
||||
if(statusVisibility==null){ // TODO find out why this happens
|
||||
statusVisibility=StatusPrivacy.PUBLIC;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -150,6 +150,7 @@ public class HomeFragment extends AppKitFragment implements OnBackPressedListene
|
||||
});
|
||||
}
|
||||
}
|
||||
tabBar.selectTab(currentTab);
|
||||
|
||||
return content;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -349,7 +349,7 @@ public class NotificationsListFragment extends BaseStatusListFragment<Notificati
|
||||
}
|
||||
|
||||
private void updateMarkAllReadButton(){
|
||||
markAllReadItem.setEnabled(!data.isEmpty() && !realUnreadMarker.equals(data.get(0).id));
|
||||
markAllReadItem.setEnabled(!data.isEmpty() && realUnreadMarker!=null && !realUnreadMarker.equals(data.get(0).id));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -52,6 +52,7 @@ public class ProfileAboutFragment extends Fragment implements WindowInsetsAwareF
|
||||
private boolean isInEditMode;
|
||||
private ItemTouchHelper dragHelper=new ItemTouchHelper(new ReorderCallback());
|
||||
private ListImageLoaderWrapper imgLoader;
|
||||
private boolean editDirty;
|
||||
|
||||
public void setFields(List<AccountField> fields){
|
||||
this.fields=fields;
|
||||
@@ -83,12 +84,17 @@ public class ProfileAboutFragment extends Fragment implements WindowInsetsAwareF
|
||||
fields=editableFields;
|
||||
adapter.notifyDataSetChanged();
|
||||
dragHelper.attachToRecyclerView(list);
|
||||
editDirty=false;
|
||||
}
|
||||
|
||||
public List<AccountField> getFields(){
|
||||
return fields;
|
||||
}
|
||||
|
||||
public boolean isEditDirty(){
|
||||
return editDirty;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onApplyWindowInsets(WindowInsets insets){
|
||||
if(Build.VERSION.SDK_INT>=29 && insets.getTappableElementInsets().bottom==0){
|
||||
@@ -209,6 +215,7 @@ public class ProfileAboutFragment extends Fragment implements WindowInsetsAwareF
|
||||
private class EditableAboutViewHolder extends BaseViewHolder{
|
||||
private final EditText title;
|
||||
private final EditText value;
|
||||
private boolean ignoreTextChange;
|
||||
|
||||
public EditableAboutViewHolder(){
|
||||
super(R.layout.onboarding_profile_field);
|
||||
@@ -218,16 +225,26 @@ public class ProfileAboutFragment extends Fragment implements WindowInsetsAwareF
|
||||
dragHelper.startDrag(this);
|
||||
return true;
|
||||
});
|
||||
title.addTextChangedListener(new SimpleTextWatcher(e->item.name=e.toString()));
|
||||
value.addTextChangedListener(new SimpleTextWatcher(e->item.value=e.toString()));
|
||||
title.addTextChangedListener(new SimpleTextWatcher(e->{
|
||||
item.name=e.toString();
|
||||
if(!ignoreTextChange)
|
||||
editDirty=true;
|
||||
}));
|
||||
value.addTextChangedListener(new SimpleTextWatcher(e->{
|
||||
item.value=e.toString();
|
||||
if(!ignoreTextChange)
|
||||
editDirty=true;
|
||||
}));
|
||||
findViewById(R.id.delete).setOnClickListener(this::onRemoveRowClick);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBind(AccountField item){
|
||||
super.onBind(item);
|
||||
ignoreTextChange=true;
|
||||
title.setText(item.name);
|
||||
value.setText(item.value);
|
||||
ignoreTextChange=false;
|
||||
}
|
||||
|
||||
private void onRemoveRowClick(View v){
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -67,6 +67,7 @@ import org.joinmastodon.android.ui.tabs.TabLayout;
|
||||
import org.joinmastodon.android.ui.tabs.TabLayoutMediator;
|
||||
import org.joinmastodon.android.ui.text.CustomEmojiSpan;
|
||||
import org.joinmastodon.android.ui.text.HtmlParser;
|
||||
import org.joinmastodon.android.ui.utils.SimpleTextWatcher;
|
||||
import org.joinmastodon.android.ui.utils.UiUtils;
|
||||
import org.joinmastodon.android.ui.views.CoverImageView;
|
||||
import org.joinmastodon.android.ui.views.CustomDrawingOrderLinearLayout;
|
||||
@@ -134,7 +135,7 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
|
||||
private boolean isOwnProfile;
|
||||
private ArrayList<AccountField> fields=new ArrayList<>();
|
||||
|
||||
private boolean isInEditMode;
|
||||
private boolean isInEditMode, editDirty;
|
||||
private Uri editNewAvatar, editNewCover;
|
||||
private String profileAccountID;
|
||||
private boolean refreshing;
|
||||
@@ -147,6 +148,7 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
|
||||
private boolean tabBarIsAtTop;
|
||||
private Animator tabBarColorAnim;
|
||||
private MenuItem editSaveMenuItem;
|
||||
private boolean savingEdits;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState){
|
||||
@@ -243,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();
|
||||
}
|
||||
});
|
||||
|
||||
@@ -268,6 +278,12 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
|
||||
refreshLayout.setOnRefreshListener(this);
|
||||
fab.setOnClickListener(this::onFabClick);
|
||||
|
||||
if(savedInstanceState!=null){
|
||||
featuredFragment=(ProfileFeaturedFragment) getChildFragmentManager().getFragment(savedInstanceState, "featured");
|
||||
timelineFragment=(AccountTimelineFragment) getChildFragmentManager().getFragment(savedInstanceState, "timeline");
|
||||
aboutFragment=(ProfileAboutFragment) getChildFragmentManager().getFragment(savedInstanceState, "about");
|
||||
}
|
||||
|
||||
if(loaded){
|
||||
bindHeaderView();
|
||||
dataLoaded();
|
||||
@@ -304,6 +320,9 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
|
||||
refreshLayout.setProgressBackgroundColorSchemeColor(UiUtils.alphaBlendColors(colorBackground, colorPrimary, 0.11f));
|
||||
refreshLayout.setColorSchemeColors(colorPrimary);
|
||||
|
||||
nameEdit.addTextChangedListener(new SimpleTextWatcher(e->editDirty=true));
|
||||
bioEdit.addTextChangedListener(new SimpleTextWatcher(e->editDirty=true));
|
||||
|
||||
return sizeWrapper;
|
||||
}
|
||||
|
||||
@@ -349,15 +368,19 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
|
||||
public void dataLoaded(){
|
||||
if(getActivity()==null)
|
||||
return;
|
||||
Bundle args=new Bundle();
|
||||
args.putString("account", accountID);
|
||||
args.putParcelable("profileAccount", Parcels.wrap(account));
|
||||
args.putBoolean("__is_tab", true);
|
||||
args.putBoolean("noAutoLoad", true);
|
||||
if(featuredFragment==null){
|
||||
featuredFragment=new ProfileFeaturedFragment();
|
||||
Bundle args=new Bundle();
|
||||
args.putString("account", accountID);
|
||||
args.putParcelable("profileAccount", Parcels.wrap(account));
|
||||
args.putBoolean("__is_tab", true);
|
||||
args.putBoolean("noAutoLoad", true);
|
||||
featuredFragment.setArguments(args);
|
||||
}
|
||||
if(timelineFragment==null){
|
||||
timelineFragment=AccountTimelineFragment.newInstance(accountID, account, true);
|
||||
}
|
||||
if(aboutFragment==null){
|
||||
aboutFragment=new ProfileAboutFragment();
|
||||
aboutFragment.setFields(fields);
|
||||
}
|
||||
@@ -423,6 +446,19 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSaveInstanceState(Bundle outState){
|
||||
super.onSaveInstanceState(outState);
|
||||
if(featuredFragment==null)
|
||||
return;
|
||||
if(featuredFragment.isAdded())
|
||||
getChildFragmentManager().putFragment(outState, "featured", featuredFragment);
|
||||
if(timelineFragment.isAdded())
|
||||
getChildFragmentManager().putFragment(outState, "timeline", timelineFragment);
|
||||
if(aboutFragment.isAdded())
|
||||
getChildFragmentManager().putFragment(outState, "about", aboutFragment);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onConfigurationChanged(Configuration newConfig){
|
||||
super.onConfigurationChanged(newConfig);
|
||||
@@ -813,6 +849,7 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
|
||||
|
||||
aboutFragment.enterEditMode(account.source.fields);
|
||||
refreshLayout.setEnabled(false);
|
||||
editDirty=false;
|
||||
}
|
||||
|
||||
private void exitEditMode(){
|
||||
@@ -861,10 +898,12 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
|
||||
if(!isInEditMode)
|
||||
throw new IllegalStateException();
|
||||
setActionProgressVisible(true);
|
||||
savingEdits=true;
|
||||
new UpdateAccountCredentials(nameEdit.getText().toString(), bioEdit.getText().toString(), editNewAvatar, editNewCover, aboutFragment.getFields())
|
||||
.setCallback(new Callback<>(){
|
||||
@Override
|
||||
public void onSuccess(Account result){
|
||||
savingEdits=false;
|
||||
account=result;
|
||||
AccountSessionManager.getInstance().updateAccountInfo(accountID, account);
|
||||
exitEditMode();
|
||||
@@ -873,6 +912,7 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
|
||||
|
||||
@Override
|
||||
public void onError(ErrorResponse error){
|
||||
savingEdits=false;
|
||||
error.showToast(getActivity());
|
||||
setActionProgressVisible(false);
|
||||
}
|
||||
@@ -896,11 +936,17 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
|
||||
@Override
|
||||
public boolean onBackPressed(){
|
||||
if(isInEditMode){
|
||||
new M3AlertDialogBuilder(getActivity())
|
||||
.setTitle(R.string.discard_changes)
|
||||
.setPositiveButton(R.string.discard, (dlg, btn)->exitEditMode())
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.show();
|
||||
if(savingEdits)
|
||||
return true;
|
||||
if(editDirty || aboutFragment.isEditDirty()){
|
||||
new M3AlertDialogBuilder(getActivity())
|
||||
.setTitle(R.string.discard_changes)
|
||||
.setPositiveButton(R.string.discard, (dlg, btn)->exitEditMode())
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.show();
|
||||
}else{
|
||||
exitEditMode();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -961,9 +1007,11 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
|
||||
if(requestCode==AVATAR_RESULT){
|
||||
editNewAvatar=data.getData();
|
||||
ViewImageLoader.loadWithoutAnimation(avatar, null, new UrlImageLoaderRequest(editNewAvatar, V.dp(100), V.dp(100)));
|
||||
editDirty=true;
|
||||
}else if(requestCode==COVER_RESULT){
|
||||
editNewCover=data.getData();
|
||||
ViewImageLoader.loadWithoutAnimation(cover, null, new UrlImageLoaderRequest(editNewCover, V.dp(1000), V.dp(1000)));
|
||||
editDirty=true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -996,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);
|
||||
}
|
||||
@@ -1006,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(){
|
||||
|
||||
@@ -7,20 +7,27 @@ import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.ViewTreeObserver;
|
||||
import android.view.WindowInsets;
|
||||
import android.widget.Button;
|
||||
import android.widget.ProgressBar;
|
||||
|
||||
import org.joinmastodon.android.MastodonApp;
|
||||
import org.joinmastodon.android.R;
|
||||
import org.joinmastodon.android.api.requests.catalog.GetCatalogDefaultInstances;
|
||||
import org.joinmastodon.android.api.requests.instance.GetInstance;
|
||||
import org.joinmastodon.android.fragments.onboarding.InstanceCatalogSignupFragment;
|
||||
import org.joinmastodon.android.fragments.onboarding.InstanceChooserLoginFragment;
|
||||
import org.joinmastodon.android.fragments.onboarding.InstanceRulesFragment;
|
||||
import org.joinmastodon.android.model.Instance;
|
||||
import org.joinmastodon.android.model.catalog.CatalogDefaultInstance;
|
||||
import org.joinmastodon.android.ui.InterpolatingMotionEffect;
|
||||
import org.joinmastodon.android.ui.M3AlertDialogBuilder;
|
||||
import org.joinmastodon.android.ui.utils.UiUtils;
|
||||
import org.joinmastodon.android.ui.views.ProgressBarButton;
|
||||
import org.joinmastodon.android.ui.views.SizeListenerFrameLayout;
|
||||
import org.parceler.Parcels;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.ThreadLocalRandom;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import me.grishka.appkit.Nav;
|
||||
import me.grishka.appkit.api.Callback;
|
||||
@@ -37,11 +44,16 @@ public class SplashFragment extends AppKitFragment{
|
||||
private View artContainer, blueFill, greenFill;
|
||||
private InterpolatingMotionEffect motionEffect;
|
||||
private View artClouds, artPlaneElephant, artRightHill, artLeftHill, artCenterHill;
|
||||
private ProgressBarButton defaultServerButton;
|
||||
private ProgressBar defaultServerProgress;
|
||||
private String chosenDefaultServer=DEFAULT_SERVER;
|
||||
private boolean loadingDefaultServer;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState){
|
||||
super.onCreate(savedInstanceState);
|
||||
motionEffect=new InterpolatingMotionEffect(MastodonApp.context);
|
||||
loadAndChooseDefaultServer();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@@ -50,9 +62,14 @@ public class SplashFragment extends AppKitFragment{
|
||||
contentView=(SizeListenerFrameLayout) inflater.inflate(R.layout.fragment_splash, container, false);
|
||||
contentView.findViewById(R.id.btn_get_started).setOnClickListener(this::onButtonClick);
|
||||
contentView.findViewById(R.id.btn_log_in).setOnClickListener(this::onButtonClick);
|
||||
Button joinDefault=contentView.findViewById(R.id.btn_join_default_server);
|
||||
joinDefault.setText(getString(R.string.join_default_server, DEFAULT_SERVER));
|
||||
joinDefault.setOnClickListener(this::onJoinDefaultServerClick);
|
||||
defaultServerButton=contentView.findViewById(R.id.btn_join_default_server);
|
||||
defaultServerButton.setText(getString(R.string.join_default_server, chosenDefaultServer));
|
||||
defaultServerButton.setOnClickListener(this::onJoinDefaultServerClick);
|
||||
defaultServerProgress=contentView.findViewById(R.id.action_progress);
|
||||
if(loadingDefaultServer){
|
||||
defaultServerButton.setTextVisible(false);
|
||||
defaultServerProgress.setVisibility(View.VISIBLE);
|
||||
}
|
||||
contentView.findViewById(R.id.btn_learn_more).setOnClickListener(this::onLearnMoreClick);
|
||||
|
||||
artClouds=contentView.findViewById(R.id.art_clouds);
|
||||
@@ -96,12 +113,22 @@ public class SplashFragment extends AppKitFragment{
|
||||
}
|
||||
|
||||
private void onJoinDefaultServerClick(View v){
|
||||
if(loadingDefaultServer)
|
||||
return;
|
||||
new GetInstance()
|
||||
.setCallback(new Callback<>(){
|
||||
@Override
|
||||
public void onSuccess(Instance result){
|
||||
if(getActivity()==null)
|
||||
return;
|
||||
if(!result.registrations){
|
||||
new M3AlertDialogBuilder(getActivity())
|
||||
.setTitle(R.string.error)
|
||||
.setMessage(R.string.instance_signup_closed)
|
||||
.setPositiveButton(R.string.ok, null)
|
||||
.show();
|
||||
return;
|
||||
}
|
||||
Bundle args=new Bundle();
|
||||
args.putParcelable("instance", Parcels.wrap(result));
|
||||
Nav.go(getActivity(), InstanceRulesFragment.class, args);
|
||||
@@ -115,7 +142,7 @@ public class SplashFragment extends AppKitFragment{
|
||||
}
|
||||
})
|
||||
.wrapProgress(getActivity(), R.string.loading_instance, true)
|
||||
.execNoAuth(DEFAULT_SERVER);
|
||||
.execNoAuth(chosenDefaultServer);
|
||||
}
|
||||
|
||||
private void onLearnMoreClick(View v){
|
||||
@@ -168,4 +195,54 @@ public class SplashFragment extends AppKitFragment{
|
||||
super.onHidden();
|
||||
motionEffect.deactivate();
|
||||
}
|
||||
|
||||
private void loadAndChooseDefaultServer(){
|
||||
loadingDefaultServer=true;
|
||||
new GetCatalogDefaultInstances()
|
||||
.setCallback(new Callback<>(){
|
||||
@Override
|
||||
public void onSuccess(List<CatalogDefaultInstance> result){
|
||||
if(result.isEmpty()){
|
||||
setChosenDefaultServer(DEFAULT_SERVER);
|
||||
return;
|
||||
}
|
||||
float sum=0f;
|
||||
for(CatalogDefaultInstance inst:result){
|
||||
sum+=inst.weight;
|
||||
}
|
||||
if(sum<=0)
|
||||
sum=1f;
|
||||
for(CatalogDefaultInstance inst:result){
|
||||
inst.weight/=sum;
|
||||
}
|
||||
float rand=ThreadLocalRandom.current().nextFloat();
|
||||
float prev=0f;
|
||||
for(CatalogDefaultInstance inst:result){
|
||||
if(rand>=prev && rand<prev+inst.weight){
|
||||
setChosenDefaultServer(inst.domain);
|
||||
return;
|
||||
}
|
||||
prev+=inst.weight;
|
||||
}
|
||||
// Just in case something didn't add up
|
||||
setChosenDefaultServer(result.get(result.size()-1).domain);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(ErrorResponse error){
|
||||
setChosenDefaultServer(DEFAULT_SERVER);
|
||||
}
|
||||
})
|
||||
.execNoAuth("");
|
||||
}
|
||||
|
||||
private void setChosenDefaultServer(String domain){
|
||||
chosenDefaultServer=domain;
|
||||
loadingDefaultServer=false;
|
||||
if(defaultServerButton!=null && getActivity()!=null){
|
||||
defaultServerButton.setTextVisible(true);
|
||||
defaultServerProgress.setVisibility(View.GONE);
|
||||
defaultServerButton.setText(getString(R.string.join_default_server, chosenDefaultServer));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()));
|
||||
}
|
||||
|
||||
@@ -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){
|
||||
|
||||
@@ -280,15 +280,19 @@ public class DiscoverFragment extends AppKitFragment implements ScrollableToTop,
|
||||
@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);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull SimpleViewHolder holder, int position){}
|
||||
public void onBindViewHolder(@NonNull SimpleViewHolder holder, int position){
|
||||
FrameLayout view=tabViews[position];
|
||||
if(view.getParent() instanceof ViewGroup parent)
|
||||
parent.removeView(view);
|
||||
view.setVisibility(View.VISIBLE);
|
||||
((FrameLayout)holder.itemView).addView(view, new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount(){
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -279,7 +277,7 @@ public class SearchQueryFragment extends MastodonRecyclerFragment<SearchResultVi
|
||||
@Override
|
||||
protected void onShown(){
|
||||
super.onShown();
|
||||
getActivity().getSystemService(InputMethodManager.class).showSoftInput(getActivity().getCurrentFocus(), 0);
|
||||
getActivity().getSystemService(InputMethodManager.class).showSoftInput(searchViewHelper.getSearchEdit(), 0);
|
||||
}
|
||||
|
||||
@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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,6 +47,7 @@ public class AccountActivationFragment extends ToolbarFragment{
|
||||
private APIRequest currentRequest;
|
||||
private Runnable resendTimer=this::updateResendTimer;
|
||||
private long lastResendTime;
|
||||
private boolean visible;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState){
|
||||
@@ -111,12 +112,14 @@ public class AccountActivationFragment extends ToolbarFragment{
|
||||
@Override
|
||||
protected void onShown(){
|
||||
super.onShown();
|
||||
visible=true;
|
||||
tryGetAccount();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onHidden(){
|
||||
super.onHidden();
|
||||
visible=false;
|
||||
if(currentRequest!=null){
|
||||
currentRequest.cancel();
|
||||
currentRequest=null;
|
||||
@@ -162,9 +165,7 @@ public class AccountActivationFragment extends ToolbarFragment{
|
||||
private void tryGetAccount(){
|
||||
if(AccountSessionManager.getInstance().tryGetAccount(accountID)==null){
|
||||
uiHandler.removeCallbacks(pollRunnable);
|
||||
getActivity().finish();
|
||||
Intent intent=new Intent(getActivity(), MainActivity.class);
|
||||
startActivity(intent);
|
||||
((MainActivity)getActivity()).restartHomeFragment();
|
||||
return;
|
||||
}
|
||||
currentRequest=new GetOwnAccount()
|
||||
@@ -229,6 +230,8 @@ public class AccountActivationFragment extends ToolbarFragment{
|
||||
}
|
||||
|
||||
private void proceed(){
|
||||
if(!visible)
|
||||
return;
|
||||
Bundle args=new Bundle();
|
||||
args.putString("account", accountID);
|
||||
// Nav.goClearingStack(getActivity(), HomeFragment.class, args);
|
||||
|
||||
@@ -228,7 +228,7 @@ abstract class InstanceCatalogFragment extends BaseRecyclerFragment<CatalogInsta
|
||||
}
|
||||
loadingInstanceDomain=null;
|
||||
showInstanceInfoLoadError(domain, error);
|
||||
if(fakeInstance!=null){
|
||||
if(fakeInstance!=null && getActivity()!=null){
|
||||
fakeInstance.description=getString(R.string.error);
|
||||
if(filteredData.size()>0 && filteredData.get(0)==fakeInstance){
|
||||
if(list.findViewHolderForAdapterPosition(1) instanceof BindableViewHolder<?> ivh){
|
||||
|
||||
@@ -45,6 +45,7 @@ import org.jsoup.nodes.TextNode;
|
||||
import org.jsoup.select.NodeVisitor;
|
||||
import org.parceler.Parcels;
|
||||
|
||||
import java.time.ZoneId;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -189,7 +190,7 @@ public class SignupFragment extends ToolbarFragment{
|
||||
edit.setError(null);
|
||||
}
|
||||
errorFields.clear();
|
||||
new RegisterAccount(username, email, password.getText().toString(), getResources().getConfiguration().locale.getLanguage(), reason.getText().toString())
|
||||
new RegisterAccount(username, email, password.getText().toString(), getResources().getConfiguration().locale.getLanguage(), reason.getText().toString(), ZoneId.systemDefault().getId())
|
||||
.setCallback(new Callback<>(){
|
||||
@Override
|
||||
public void onSuccess(Token result){
|
||||
@@ -270,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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -100,7 +100,6 @@ public class ReportAddPostsChoiceFragment extends StatusListFragment{
|
||||
selectedIDs.remove(id);
|
||||
else
|
||||
selectedIDs.add(id);
|
||||
btn.setEnabled(!selectedIDs.isEmpty());
|
||||
CheckableHeaderStatusDisplayItem.Holder holder=findHolderOfType(id, CheckableHeaderStatusDisplayItem.Holder.class);
|
||||
if(holder!=null)
|
||||
holder.rebind();
|
||||
@@ -110,7 +109,6 @@ public class ReportAddPostsChoiceFragment extends StatusListFragment{
|
||||
public void onViewCreated(View view, Bundle savedInstanceState){
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
btn=view.findViewById(R.id.btn_next);
|
||||
btn.setEnabled(!selectedIDs.isEmpty());
|
||||
btn.setOnClickListener(this::onButtonClick);
|
||||
buttonBar=view.findViewById(R.id.button_bar);
|
||||
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
@@ -149,9 +156,7 @@ public class SettingsMainFragment extends BaseSettingsFragment<Void>{
|
||||
.setMessage(getString(R.string.confirm_log_out, session.getFullUsername()))
|
||||
.setPositiveButton(R.string.log_out, (dialog, which)->AccountSessionManager.get(accountID).logOut(getActivity(), ()->{
|
||||
loggedOut=true;
|
||||
getActivity().finish();
|
||||
Intent intent=new Intent(getActivity(), MainActivity.class);
|
||||
startActivity(intent);
|
||||
((MainActivity)getActivity()).restartHomeFragment();
|
||||
}))
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.show();
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -146,18 +146,21 @@ public class SettingsServerFragment extends AppKitFragment{
|
||||
@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);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull SimpleViewHolder holder, int position){
|
||||
FrameLayout view=tabViews[position];
|
||||
if(view.getParent() instanceof ViewGroup parent)
|
||||
parent.removeView(view);
|
||||
view.setVisibility(View.VISIBLE);
|
||||
((FrameLayout)holder.itemView).addView(view, new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
|
||||
Fragment fragment=getFragmentForPage(position);
|
||||
if(!fragment.isAdded()){
|
||||
getChildFragmentManager().beginTransaction().add(holder.itemView.getId(), fragment).commit();
|
||||
getChildFragmentManager().beginTransaction().add(view.getId(), fragment).commit();
|
||||
holder.itemView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener(){
|
||||
@Override
|
||||
public boolean onPreDraw(){
|
||||
|
||||
@@ -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+
|
||||
'}';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,26 +45,26 @@ public class Attachment extends BaseModel{
|
||||
|
||||
public int getWidth(){
|
||||
if(meta==null)
|
||||
return 1920;
|
||||
return 0;
|
||||
if(meta.width>0)
|
||||
return meta.width;
|
||||
if(meta.original!=null && meta.original.width>0)
|
||||
return meta.original.width;
|
||||
if(meta.small!=null && meta.small.width>0)
|
||||
return meta.small.width;
|
||||
return 1920;
|
||||
return 0;
|
||||
}
|
||||
|
||||
public int getHeight(){
|
||||
if(meta==null)
|
||||
return 1080;
|
||||
return 0;
|
||||
if(meta.height>0)
|
||||
return meta.height;
|
||||
if(meta.original!=null && meta.original.height>0)
|
||||
return meta.original.height;
|
||||
if(meta.small!=null && meta.small.height>0)
|
||||
return meta.small.height;
|
||||
return 1080;
|
||||
return 0;
|
||||
}
|
||||
|
||||
public double getDuration(){
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -117,7 +117,7 @@ public class Instance extends BaseModel{
|
||||
ci.domain=uri;
|
||||
ci.normalizedDomain=IDN.toUnicode(uri);
|
||||
ci.description=Html.fromHtml(shortDescription).toString().trim();
|
||||
if(languages!=null){
|
||||
if(languages!=null&&languages.size()>0){
|
||||
ci.language=languages.get(0);
|
||||
ci.languages=languages;
|
||||
}else{
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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+
|
||||
'}';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package org.joinmastodon.android.model.catalog;
|
||||
|
||||
import org.joinmastodon.android.api.AllFieldsAreRequired;
|
||||
import org.joinmastodon.android.model.BaseModel;
|
||||
|
||||
@AllFieldsAreRequired
|
||||
public class CatalogDefaultInstance extends BaseModel{
|
||||
public String domain;
|
||||
public float weight;
|
||||
}
|
||||
@@ -8,6 +8,7 @@ import android.graphics.drawable.Animatable;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.WindowInsets;
|
||||
@@ -36,6 +37,7 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.StringRes;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import me.grishka.appkit.FragmentStackActivity;
|
||||
import me.grishka.appkit.Nav;
|
||||
import me.grishka.appkit.api.Callback;
|
||||
import me.grishka.appkit.api.ErrorResponse;
|
||||
@@ -113,9 +115,7 @@ public class AccountSwitcherSheet extends BottomSheet{
|
||||
private void logOut(String accountID){
|
||||
AccountSessionManager.get(accountID).logOut(activity, ()->{
|
||||
dismiss();
|
||||
activity.finish();
|
||||
Intent intent=new Intent(activity, MainActivity.class);
|
||||
activity.startActivity(intent);
|
||||
((MainActivity)activity).restartHomeFragment();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -248,16 +248,17 @@ public class AccountSwitcherSheet extends BottomSheet{
|
||||
|
||||
@Override
|
||||
public void onClick(){
|
||||
dismiss();
|
||||
if(AccountSessionManager.getInstance().getLastActiveAccountID().equals(item.getID())){
|
||||
dismiss();
|
||||
if(fragment!=null){
|
||||
fragment.setCurrentTab(R.id.tab_profile);
|
||||
}
|
||||
return;
|
||||
}
|
||||
AccountSessionManager.getInstance().setLastActiveAccountID(item.getID());
|
||||
activity.finish();
|
||||
activity.startActivity(new Intent(activity, MainActivity.class));
|
||||
if(AccountSessionManager.getInstance().tryGetAccount(item.getID())!=null){
|
||||
AccountSessionManager.getInstance().setLastActiveAccountID(item.getID());
|
||||
((MainActivity)activity).restartHomeFragment();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -126,4 +126,8 @@ public class SearchViewHelper{
|
||||
public View getDivider(){
|
||||
return divider;
|
||||
}
|
||||
|
||||
public EditText getSearchEdit(){
|
||||
return searchEdit;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
});
|
||||
@@ -280,9 +283,20 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
|
||||
}
|
||||
|
||||
private void updateOptionsMenu(){
|
||||
if(item.parentFragment.getActivity()==null)
|
||||
return;
|
||||
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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -99,11 +99,15 @@ public class BlurhashCrossfadeDrawable extends Drawable{
|
||||
|
||||
@Override
|
||||
public int getIntrinsicWidth(){
|
||||
if(width==0)
|
||||
return imageDrawable==null ? 1920 : imageDrawable.getIntrinsicWidth();
|
||||
return width;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getIntrinsicHeight(){
|
||||
if(height==0)
|
||||
return imageDrawable==null ? 1080 : imageDrawable.getIntrinsicHeight();
|
||||
return height;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -119,6 +119,11 @@ public class ZoomPanView extends FrameLayout implements ScaleGestureDetector.OnS
|
||||
|
||||
int width=right-left;
|
||||
int height=bottom-top;
|
||||
if(width==0 || height==0 || child.getWidth()==0 || child.getWidth()==0){
|
||||
matrix.reset();
|
||||
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 +311,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]);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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){
|
||||
|
||||
@@ -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();
|
||||
@@ -560,7 +575,7 @@ public class ComposeMediaViewController{
|
||||
|
||||
public boolean areAllAttachmentsImages(){
|
||||
for(DraftMediaAttachment att:attachments){
|
||||
if(!att.mimeType.startsWith("image/"))
|
||||
if((att.mimeType==null && att.serverAttachment.type==Attachment.Type.IMAGE) || (att.mimeType!=null && !att.mimeType.startsWith("image/")))
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
9
mastodon/src/main/res/drawable/ic_privacy_tip_24px.xml
Normal file
9
mastodon/src/main/res/drawable/ic_privacy_tip_24px.xml
Normal 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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
44
mastodon/src/main/res/layout/footer_text_translation.xml
Normal file
44
mastodon/src/main/res/layout/footer_text_translation.xml
Normal 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>
|
||||
@@ -88,6 +88,7 @@
|
||||
android:paddingRight="16dp"
|
||||
android:textAppearance="@style/m3_body_large"
|
||||
android:gravity="center_vertical"
|
||||
android:textColor="?colorM3OnSurface"
|
||||
tools:text="\@mastodon.social"/>
|
||||
|
||||
</org.joinmastodon.android.ui.views.FloatingHintEditTextLayout>
|
||||
|
||||
@@ -84,14 +84,17 @@
|
||||
android:layout_below="@id/cover"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_marginTop="16dp"
|
||||
android:layout_marginEnd="16dp">
|
||||
android:layout_marginHorizontal="16dp"
|
||||
android:paddingStart="120dp">
|
||||
|
||||
<org.joinmastodon.android.ui.views.ProgressBarButton
|
||||
android:id="@+id/profile_action_btn"
|
||||
style="@style/Widget.Mastodon.M3.Button.Filled"
|
||||
android:layout_width="156dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="40dp"
|
||||
tools:text="Edit Profile" />
|
||||
style="@style/Widget.Mastodon.M3.Button.Filled"
|
||||
android:minWidth="156dp"
|
||||
android:paddingHorizontal="16dp"
|
||||
tools:text="@string/save_changes" />
|
||||
|
||||
<ProgressBar
|
||||
android:id="@+id/action_progress"
|
||||
|
||||
@@ -104,14 +104,32 @@
|
||||
android:layout_height="0px"
|
||||
android:layout_weight="1"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_join_default_server"
|
||||
<FrameLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="16dp"
|
||||
android:layout_marginRight="16dp"
|
||||
style="@style/Widget.Mastodon.M3.Button.Filled"
|
||||
tools:text="@string/join_default_server"/>
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<org.joinmastodon.android.ui.views.ProgressBarButton
|
||||
android:id="@+id/btn_join_default_server"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="16dp"
|
||||
android:layout_marginRight="16dp"
|
||||
style="@style/Widget.Mastodon.M3.Button.Filled"
|
||||
tools:text="@string/join_default_server"/>
|
||||
|
||||
<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:indeterminateTint="#FFF"
|
||||
android:visibility="gone" />
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_get_started"
|
||||
|
||||
62
mastodon/src/main/res/layout/header_hashtag_timeline.xml
Normal file
62
mastodon/src/main/res/layout/header_hashtag_timeline.xml
Normal 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>
|
||||
@@ -12,6 +12,7 @@
|
||||
android:textAppearance="@style/m3_body_large"
|
||||
android:paddingStart="56dp"
|
||||
android:paddingEnd="24dp"
|
||||
android:textColor="?colorM3OnSurface"
|
||||
android:text="@string/login_subtitle"/>
|
||||
|
||||
<org.joinmastodon.android.ui.views.FloatingHintEditTextLayout
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="top"
|
||||
android:textAppearance="@style/m3_body_large"
|
||||
android:textColor="?colorM3OnSurface"
|
||||
tools:text="No discrimination, including (but not limited to) racism, sexism, homophobia or transphobia."/>
|
||||
|
||||
</LinearLayout>
|
||||
@@ -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"/>
|
||||
|
||||
@@ -4,11 +4,18 @@
|
||||
<string name="next">التالي</string>
|
||||
<string name="loading_instance">جارٍ جلب معلومات الخادم…</string>
|
||||
<string name="error">خطأ</string>
|
||||
<string name="not_a_mastodon_instance">لا يبدو أنّ %s كخادم ماستدون.</string>
|
||||
<string name="ok">حسنًا</string>
|
||||
<string name="preparing_auth">جَارٍ الإعدَادُ لِلمُصادَقَة…</string>
|
||||
<string name="finishing_auth">يُنهي المصادقة…</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>
|
||||
<string name="user_sent_follow_request">%s أرسَلَ طَلَبًا لِمُتابَعَتِك</string>
|
||||
<string name="user_favorited">%s أعجَبه منشورك</string>
|
||||
<string name="notification_boosted">قام %s بإعادة نشر منشورك</string>
|
||||
<string name="poll_ended">الاطلاع على نتائج استطلاع الرأي الذي صوّت فيه</string>
|
||||
<string name="share_toot_title">شارك</string>
|
||||
<string name="settings">الإعدادات</string>
|
||||
<string name="publish">انشر</string>
|
||||
@@ -37,7 +44,8 @@
|
||||
<string name="profile_about">حَول</string>
|
||||
<string name="button_follow">تابِع</string>
|
||||
<string name="button_following">مُتابَع</string>
|
||||
<string name="edit_profile">حرّر الملف الشخصي</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>
|
||||
@@ -117,8 +125,16 @@
|
||||
<item quantity="many">تبقى %d يومًا</item>
|
||||
<item quantity="other">تبقى %d يوم</item>
|
||||
</plurals>
|
||||
<string name="poll_closed">انتهى</string>
|
||||
<string name="confirm_mute_title">اكتم الحساب</string>
|
||||
<plurals name="x_votes">
|
||||
<item quantity="zero">%,d صوت</item>
|
||||
<item quantity="one">%,d صوت واحد</item>
|
||||
<item quantity="two">صوتين</item>
|
||||
<item quantity="few">%,d أصوات</item>
|
||||
<item quantity="many">%,d صوتا</item>
|
||||
<item quantity="other">%,d صوتا</item>
|
||||
</plurals>
|
||||
<string name="poll_closed">مغلق</string>
|
||||
<string name="confirm_mute_title">كتم الحساب</string>
|
||||
<string name="confirm_mute">أكّد كتم %s</string>
|
||||
<string name="do_mute">اكتم</string>
|
||||
<string name="confirm_unmute_title">ارفع الكتم عن الحساب</string>
|
||||
@@ -135,17 +151,20 @@
|
||||
<string name="button_blocked">محجوب</string>
|
||||
<string name="action_vote">صَوّت</string>
|
||||
<string name="delete">احذف</string>
|
||||
<string name="confirm_delete_title">احذف المنشور</string>
|
||||
<string name="confirm_delete">أمتأكد من حذف هذا المنشور؟</string>
|
||||
<string name="deleting">يحذف…</string>
|
||||
<string name="notification_channel_audio_player">تشغيل الصوت</string>
|
||||
<string name="play">شغّل</string>
|
||||
<string name="pause">ألبث</string>
|
||||
<string name="log_out">الخروج</string>
|
||||
<string name="add_account">أضف حساباً</string>
|
||||
<string name="search_hint">ابحث</string>
|
||||
<string name="hashtags">وُسُوم</string>
|
||||
<string name="news">الأخبار</string>
|
||||
<string name="for_you">لأجلك</string>
|
||||
<string name="mentions">الذِكر</string>
|
||||
<string name="all_notifications">كلها</string>
|
||||
<string name="mentions">الإشارات</string>
|
||||
<plurals name="x_people_talking">
|
||||
<item quantity="zero">لا أحد يتحدث</item>
|
||||
<item quantity="one">شخص واحد يتحدث</item>
|
||||
@@ -155,11 +174,16 @@
|
||||
<item quantity="other">%d شخص يتحدثون</item>
|
||||
</plurals>
|
||||
<string name="report_title">بلّغ عن %s</string>
|
||||
<string name="report_choose_reason">ما المُشكِلَةُ فِي هَذَا المَنشُور؟</string>
|
||||
<string name="report_choose_reason_account">ما المُشكِلَة مَعَ %s؟</string>
|
||||
<string name="report_choose_reason_subtitle">اختر أفضل تطابق</string>
|
||||
<string name="report_reason_personal">لا يعجبني</string>
|
||||
<string name="report_reason_personal_subtitle">ألا ترغب برؤيته</string>
|
||||
<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>
|
||||
<string name="report_choose_rule_subtitle">اختر كل ما ينطبق</string>
|
||||
@@ -168,8 +192,14 @@
|
||||
<string name="report_comment_title">هل لديك شيء آخر لتخبرنا به؟</string>
|
||||
<string name="report_comment_hint">تعليقات إضافية</string>
|
||||
<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">ألغ المتابعة</string>
|
||||
<string name="mute_user_explain">لن ترى مشاركاتهم. لكن لا يزال بإمكانهم متابعتك ورؤية مشاركاتك ولن يعرفوا أنه تم كتم صوتها.</string>
|
||||
<string name="block_user_explain">لن ترى مشاركاتهم. ولن يتمكنوا من رؤية مشاركاتك أو متابعتك. سيكونون قادرين على معرفة أنهم محظورون.</string>
|
||||
<string name="report_personal_title">لا تريد أن ترى هذا؟</string>
|
||||
<string name="report_personal_subtitle">فيما يلي خياراتك للتحكم بما يُعرَض عليك في ماستدون:</string>
|
||||
<string name="back">العودة</string>
|
||||
<string name="search_communities">اسم الخادم أو عنوان URL</string>
|
||||
<string name="instance_rules_title">قواعد الخادم</string>
|
||||
@@ -196,23 +226,39 @@
|
||||
<string name="category_tech">تقني</string>
|
||||
<string name="confirm_email_title">تحقق من صندوق الوارد الخاص بك</string>
|
||||
<!-- %s is the email address -->
|
||||
<string name="confirm_email_subtitle">اضغط على الرابط الذي أرسلناه إليك للتحقق من %s. سننتظر هنا.</string>
|
||||
<string name="confirm_email_didnt_get">ألم تحصل على رابط؟</string>
|
||||
<string name="resend">أعد الإرسال</string>
|
||||
<string name="open_email_app">افتح تطبيق البريد الإلكتروني</string>
|
||||
<string name="resent_email">أُرسلت رسالة التأكيد</string>
|
||||
<string name="compose_hint">عَبِّر عَمَّ يَجُولُ فِي ذِهنِك</string>
|
||||
<string name="content_warning">تحذير من المحتوى</string>
|
||||
<string name="save">احفظ</string>
|
||||
<string name="add_alt_text">أضف نصًا بديلًا</string>
|
||||
<string name="visibility_public">علني</string>
|
||||
<string name="visibility_followers_only">للمُتابِعينَ فقط</string>
|
||||
<string name="visibility_private">للمشار إليهم فقط</string>
|
||||
<string name="recent_searches">الحديثة</string>
|
||||
<string name="skip">تخطى</string>
|
||||
<string name="notification_type_follow">متابعُون جُدُد</string>
|
||||
<string name="notification_type_favorite">المفضلة</string>
|
||||
<string name="notification_type_mention">الذِكر</string>
|
||||
<string name="notification_type_reblog">المعاد نشرها</string>
|
||||
<string name="notification_type_mention">الإشارات</string>
|
||||
<string name="notification_type_poll">استطلاع رأي</string>
|
||||
<string name="choose_account">اختر حسابًا</string>
|
||||
<string name="err_not_logged_in">يرجى تسجيل الدخول إلى حساب ماستدون أولًا</string>
|
||||
<plurals name="cant_add_more_than_x_attachments">
|
||||
<item quantity="zero">لا يمكن إرفاق أكثر من ملف واحد</item>
|
||||
<item quantity="one">لا يمكن إرفاق أكثر من ملف واحد</item>
|
||||
<item quantity="two">لا يمكنك إرفاق أكثر من %d ملفين</item>
|
||||
<item quantity="few">لا يمكن إرفاق أكثر من %d ملفات</item>
|
||||
<item quantity="many">لا يمكن إرفاق أكثر من %d ملفات</item>
|
||||
<item quantity="other">لا يمكن إرفاق أكثر من %d ملف</item>
|
||||
</plurals>
|
||||
<string name="media_attachment_unsupported_type">نوع الملف %s غير مدعوم</string>
|
||||
<string name="media_attachment_too_big">الملف %1$s يتجاوز حدّ %2$s مب</string>
|
||||
<string name="settings_theme">المظهر</string>
|
||||
<string name="theme_auto">استخدام مظهر الجهاز</string>
|
||||
<string name="theme_light">فاتح</string>
|
||||
<string name="theme_dark">داكن</string>
|
||||
<string name="settings_behavior">السلوك</string>
|
||||
@@ -225,9 +271,13 @@
|
||||
<string name="settings_clear_cache">امسح التخزين المؤقت للوسائط</string>
|
||||
<string name="settings_app_version">تطبيق ماستدون لأندرويد نسخة %1$s (%2$d)</string>
|
||||
<string name="media_cache_cleared">مُسح التخزين المؤقت للوسائط</string>
|
||||
<string name="confirm_log_out">تسجيل الخروج من %s؟</string>
|
||||
<string name="sensitive_content_explain">وصف المؤلف هذه الوسائط بأنها حساسة.</string>
|
||||
<string name="avatar_description">انتقل إلى الصفحة الشخصية لـ %s</string>
|
||||
<string name="more_options">مزيد من الخيارات</string>
|
||||
<string name="new_post">منشور جديد</string>
|
||||
<string name="button_reply">ردّ</string>
|
||||
<string name="button_reblog">إعادة النشر</string>
|
||||
<string name="button_favorite">فضّل</string>
|
||||
<string name="button_share">شارك</string>
|
||||
<string name="media_no_description">وسائط بدون وصف</string>
|
||||
@@ -239,7 +289,11 @@
|
||||
<string name="media_viewer">عارض الوسائط</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="signup_reason">لماذا تريد الانضمام؟</string>
|
||||
<string name="signup_reason_note">هذا سوف يساعدنا في مراجعة تطبيقك.</string>
|
||||
<string name="clear">امسح</string>
|
||||
@@ -253,7 +307,13 @@
|
||||
<string name="error_saving_file">خطأ أثناء حفظ الملف</string>
|
||||
<string name="file_saved">حُفظ الملف</string>
|
||||
<string name="downloading">ينزّل…</string>
|
||||
<string name="no_app_to_handle_action">لا يوجد تطبيق لمعالجة هذا الإجراء</string>
|
||||
<string name="local_timeline">المحلي</string>
|
||||
<string name="trending_posts_info_banner">هذه هي المشاركات التي تكتسب شعبية عبر ماستدون.</string>
|
||||
<string name="trending_links_info_banner">هذه هي القصص الإخبارية التي يُتحدّث عنها على ماستدون.</string>
|
||||
<!-- %s is the server domain -->
|
||||
<string name="local_timeline_info_banner">هذه هي جميع المشاركات من جميع المستخدمين في الخادم الخاص بك (%s).</string>
|
||||
<string name="recommended_accounts_info_banner">قد تعجبك هذه الحسابات استنادا إلى حسابات أخرى تتابعها.</string>
|
||||
<string name="see_new_posts">استعرض المنشورات الجديدة</string>
|
||||
<string name="load_missing_posts">حمّل المَنشورات المَفقودَة</string>
|
||||
<string name="follow_back">رُدّ المتابعة</string>
|
||||
@@ -285,6 +345,14 @@
|
||||
<item quantity="many">%,d تفضيلًا</item>
|
||||
<item quantity="other">%,d تفضيل</item>
|
||||
</plurals>
|
||||
<plurals name="x_reblogs">
|
||||
<item quantity="zero">لم يُعد نشره</item>
|
||||
<item quantity="one">إعادة نشر واحدة</item>
|
||||
<item quantity="two">أعيد نشره مرّتان</item>
|
||||
<item quantity="few">أعيد نشره %,d مرات</item>
|
||||
<item quantity="many">أعيد نشره %,d مرات</item>
|
||||
<item quantity="other">أعيد نشره %,d مرات</item>
|
||||
</plurals>
|
||||
<string name="timestamp_via_app">%1$s عبر %2$s</string>
|
||||
<string name="time_now">الآن</string>
|
||||
<string name="edit_history">تاريخ التعديل</string>
|
||||
@@ -294,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>
|
||||
@@ -347,6 +415,7 @@
|
||||
<string name="login_title">مرحبا بك مجددًا</string>
|
||||
<string name="login_subtitle">قم بتسجيل الدخول باستخدام الخادم حيث قمتَ بإنشاء حسابك فيه.</string>
|
||||
<string name="server_url">رابط الخادم</string>
|
||||
<string name="signup_random_server_explain">سوف نختار خادماً بناءً على لغتك إذا قمت بالمتابعة دون إجراء إختيار.</string>
|
||||
<string name="server_filter_any_language">أي لغة</string>
|
||||
<string name="server_filter_instant_signup">تسجيل فوري</string>
|
||||
<string name="server_filter_manual_review">مراجعة يدوية</string>
|
||||
@@ -359,6 +428,7 @@
|
||||
<string name="server_filter_region_oceania">أوقيانوسيا</string>
|
||||
<string name="not_accepting_new_members">لا يقبل استقبال أعضاء جدد</string>
|
||||
<string name="category_special_interests">المصالح الخاصة</string>
|
||||
<string name="signup_passwords_dont_match">كلمات المرور غير متطابقة</string>
|
||||
<string name="pick_server_for_me">اختر لي</string>
|
||||
<string name="profile_add_row">إضافة صف</string>
|
||||
<string name="profile_setup">إعداد الملف الشخصي</string>
|
||||
@@ -367,21 +437,279 @@
|
||||
<string name="popular_on_mastodon">مشهور على ماستدون</string>
|
||||
<string name="follow_all">اتبع الكل</string>
|
||||
<string name="server_rules_disagree">لا أوافق</string>
|
||||
<string name="privacy_policy_explanation">بالمختصر: نحن لا نجمع أو نعالج أي شيء.</string>
|
||||
<!-- %s is server domain -->
|
||||
<string name="server_policy_disagree">لا أوافق %s</string>
|
||||
<string name="profile_bio">نبذة عنك</string>
|
||||
<!-- Shown in a progress dialog when you tap "follow all" -->
|
||||
<string name="sending_follows">متابعة المستخدمين…</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 لا يسمح بالاشتراكات من %2$s. جرب خادما واحدا أو <a>اختر خادما مختلفا</a>.</string>
|
||||
<string name="spoiler_show">إظهاره على أي حال</string>
|
||||
<string name="spoiler_hide">إعادة الإخفاء</string>
|
||||
<string name="poll_multiple_choice">اختر واحدا أو أكثر</string>
|
||||
<string name="save_changes">حفظ التغييرات</string>
|
||||
<string name="profile_featured">المميزة</string>
|
||||
<string name="profile_timeline">الخيط</string>
|
||||
<string name="view_all">عرض الكل</string>
|
||||
<string name="profile_endorsed_accounts">الحسابات</string>
|
||||
<string name="verified_link">رابط متحقق منه</string>
|
||||
<string name="show">إظهار</string>
|
||||
<string name="hide">إخفاء</string>
|
||||
<string name="join_default_server">الانضمام إلى %s</string>
|
||||
<string name="pick_server">اختر خادما آخر</string>
|
||||
<string name="signup_or_login">أو</string>
|
||||
<string name="learn_more">تعلم المزيد</string>
|
||||
<string name="welcome_to_mastodon">أهلًا بك على ماستدون</string>
|
||||
<string name="welcome_paragraph1">ماستدون شبكة اجتماعية لامركزية، بمعنى أنه ليس هناك شركة واحدة تتحكم فيها. وهي تتألف من العديد من الخوادم التي تدار بشكل مستقل، وجميعها متصلة معا.</string>
|
||||
<string name="what_are_servers">ما هي الخوادم؟</string>
|
||||
<string name="welcome_paragraph2">تتم استضافة كل حساب ماستدون على خادم - ولكل خادم قيمه وقواعده ومسؤوليه الخاصين. مهما اخترت أي خادم، يمكنك متابعة الأشخاص والتفاعل معهم على أي خادم آخر.</string>
|
||||
<string name="opening_link">رابط الافتتاح…</string>
|
||||
<string name="link_not_supported">هذا الرابط غير مدعوم في التطبيق</string>
|
||||
<string name="log_out_all_accounts">تسجيل الخروج من جميع الحسابات</string>
|
||||
<string name="confirm_log_out_all_accounts">أتريد تسجيل الخروج من جميع الحسابات؟</string>
|
||||
<string name="retry">حاول مجددًا</string>
|
||||
<string name="post_failed">أخفق في الإرسال</string>
|
||||
<!-- %s is formatted file size ("467 KB image") -->
|
||||
<string name="attachment_description_image">صورة %s</string>
|
||||
<string name="attachment_description_video">فيديو %s</string>
|
||||
<string name="attachment_description_audio">مقطع صوتي %s</string>
|
||||
<string name="attachment_description_unknown">ملف %s</string>
|
||||
<string name="attachment_type_image">صورة</string>
|
||||
<string name="attachment_type_video">فيديو</string>
|
||||
<string name="attachment_type_audio">مقطع صوتي</string>
|
||||
<string name="attachment_type_gif">GIF</string>
|
||||
<string name="attachment_type_unknown">ملف</string>
|
||||
<string name="attachment_x_percent_uploaded">%d%% تم الرفع</string>
|
||||
<string name="add_poll_option">إضافة خيار للاستطلاع</string>
|
||||
<string name="poll_length">مدة الاستطلاع</string>
|
||||
<string name="poll_style">النوع</string>
|
||||
<string name="compose_poll_single_choice">اختر واحدا</string>
|
||||
<string name="compose_poll_multiple_choice">خيارات متعددة</string>
|
||||
<string name="delete_poll_option">حذف خيار من الاستطلاع</string>
|
||||
<string name="poll_style_title">نمط الاستطلاع</string>
|
||||
<string name="alt_text">نص بديل</string>
|
||||
<string name="help">المساعدة</string>
|
||||
<string name="what_is_alt_text">ما هو النص البديل؟</string>
|
||||
<string name="alt_text_help">يوفر النص البديل أوصافا للصور للأشخاص الذين يعانون من إعاقات بصرية أو اتصالات ذات نطاق ترددي منخفض أو أولئك الذين يبحثون عن سياق إضافي.\n\nيمكنك تحسين إمكانية الوصول والفهم للجميع من خلال كتابة نص بديل واضح وموجز وموضوعي.\n\n التقاط العناصر المهمة\n<ul><li>تلخيص النص في الصور</li>\n<li>استخدام بنية الجملة العادية</li>\n<li>تجنب المعلومات الزائدة</li>\n<li>التركيز على الاتجاهات والنتائج الرئيسية في العناصر المرئية المعقدة (مثل الرسوم البيانية أو الخرائط)</li><li></li></ul></string>
|
||||
<string name="edit_post">تعديل المنشور</string>
|
||||
<string name="no_verified_link">لم يتم التحقق من الرابط</string>
|
||||
<string name="compose_autocomplete_emoji_empty">تصفح الرموز التعبيرية</string>
|
||||
<string name="compose_autocomplete_users_empty">العثور على الأشخاص الذين تبحث عنهم</string>
|
||||
<string name="no_search_results">تعذر العثور على أي نتائج لمصطلحات البحث هذه</string>
|
||||
<string name="language">اللغة</string>
|
||||
<string name="language_default">الافتراضية</string>
|
||||
<string name="language_system">النظام</string>
|
||||
<string name="language_detecting">اكتشاف اللغة</string>
|
||||
<string name="language_cant_detect">تعذر اكتشاف اللغة</string>
|
||||
<string name="language_detected">الكشف عن</string>
|
||||
<string name="media_hidden">وسائط مخفية</string>
|
||||
<string name="post_hidden">منشور مخفي</string>
|
||||
<string name="report_title_post">الإبلاغ عن المنشور</string>
|
||||
<string name="forward_report_explanation">الحساب من خادم آخر. هل تودّ إرسال نسخة مجهولة المصدر من هذا التقرير هناك أيضا؟</string>
|
||||
<!-- %s is the server domain -->
|
||||
<string name="forward_report_to_server">تحويله إلى %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">تم الإبلاغ عنه</string>
|
||||
<string name="report_unfollow_explanation">لعدم رؤية مشاركاتهم في خلاصة ملخصك بعد الآن، ألغِ متابعتهم.</string>
|
||||
<string name="muted_user">كتم %s</string>
|
||||
<string name="report_sent_already_blocked">لقد حظرت هذا المستخدم من قبل، لذلك لا يوجد شيء آخر عليك القيام به خلال مراجعة بلاغك.</string>
|
||||
<string name="report_personal_already_blocked">لقد قمت بالفعل بحظر هذا المستخدم، لذلك لا يوجد شيء آخر عليك القيام به.\n\nشكرا للمساعدة في الحفاظ على ماستدون مكانا آمنا للجميع!</string>
|
||||
<string name="blocked_user">حظر %s</string>
|
||||
<string name="mark_all_notifications_read">اعتبار الكل كمقروء</string>
|
||||
<string name="settings_display">الشاشة</string>
|
||||
<string name="settings_filters">عوامل التصفية</string>
|
||||
<string name="settings_server_explanation">نظرة عامة وقواعد ومشرفين</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">عن %s</string>
|
||||
<string name="default_post_language">اللغة الافتراضية للمنشور</string>
|
||||
<string name="settings_alt_text_reminders">إضافة تذكير بالنصوص البديلة</string>
|
||||
<string name="settings_confirm_unfollow">السؤال قبل إلغاء متابعة شخص ما</string>
|
||||
<string name="settings_confirm_boost">اسأل قبل إعادة النشر</string>
|
||||
<string name="settings_confirm_delete_post">السؤال قبل حذف المشاركات</string>
|
||||
<string name="pause_all_notifications">إيقاف الكل</string>
|
||||
<string name="pause_notifications_off">إيقاف</string>
|
||||
<string name="notifications_policy_anyone">أيا كان</string>
|
||||
<string name="notifications_policy_followed">الأشخاص الذين تتابعهم</string>
|
||||
<string name="notifications_policy_follower">الأشخاص الذين تتابعهم</string>
|
||||
<string name="notifications_policy_no_one">لا أحد</string>
|
||||
<string name="settings_notifications_policy">تلقي الإشعارات من</string>
|
||||
<string name="notification_type_mentions_and_replies">الإشارات والردود</string>
|
||||
<string name="pause_all_notifications_title">إيقاف جميع الإشعارات مؤقتًا</string>
|
||||
<plurals name="x_weeks">
|
||||
<item quantity="zero">%d أسبوع</item>
|
||||
<item quantity="one">أسبوع واحد</item>
|
||||
<item quantity="two">أسبوعان</item>
|
||||
<item quantity="few">%d أسابيع</item>
|
||||
<item quantity="many">%d أسبوعًا</item>
|
||||
<item quantity="other">%d أسابيع</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 في %2$s</string>
|
||||
<string name="today">اليوم</string>
|
||||
<string name="yesterday">أمس</string>
|
||||
<string name="tomorrow">غدًا</string>
|
||||
<!-- %s is the timestamp ("tomorrow at 12:34") -->
|
||||
<string name="pause_notifications_ends">ينتهي %s</string>
|
||||
<!-- %s is the timestamp ("tomorrow at 12:34") -->
|
||||
<string name="pause_notifications_banner">سيتم استئناف الإشعارات %s.</string>
|
||||
<string name="resume_notifications_now">استأنف الآن</string>
|
||||
<string name="open_system_notification_settings">الانتقال إلى إعدادات الإشعارات</string>
|
||||
<string name="about_server">عن</string>
|
||||
<string name="server_rules">القواعد</string>
|
||||
<string name="server_administrator">المدير</string>
|
||||
<string name="send_email_to_server_admin">للاتصال بالمدير</string>
|
||||
<string name="notifications_disabled_in_system">شغل الإشعارات من إعدادات جهازك لرؤية التحديثات من أي مكان.</string>
|
||||
<string name="settings_even_more">المزيد من الإعدادات</string>
|
||||
<string name="settings_show_cws">إظهار تحذيرات المحتوى</string>
|
||||
<string name="settings_hide_sensitive_media">فلرتة الوسائط التي تم وضع علامة عليها على أنها حساسة</string>
|
||||
<string name="settings_show_interaction_counts">عدد التفاعل مع المنشورات</string>
|
||||
<string name="settings_show_emoji_in_names">رموز تعبيرية مخصصة في أسماء العرض</string>
|
||||
<plurals name="in_x_seconds">
|
||||
<item quantity="zero">في %d ثانية</item>
|
||||
<item quantity="one">في ثانية واحدة</item>
|
||||
<item quantity="two">في ثانيتين</item>
|
||||
<item quantity="few">في %d ثوانٍ</item>
|
||||
<item quantity="many">في %d ثانية</item>
|
||||
<item quantity="other">في %d ثوان</item>
|
||||
</plurals>
|
||||
<plurals name="in_x_minutes">
|
||||
<item quantity="zero">في %d دقيقة</item>
|
||||
<item quantity="one">في دقيقة واحدة</item>
|
||||
<item quantity="two">في دقيقتين</item>
|
||||
<item quantity="few">في %d دقائق</item>
|
||||
<item quantity="many">في %d دقيقة</item>
|
||||
<item quantity="other">في %d دقائق</item>
|
||||
</plurals>
|
||||
<plurals name="in_x_hours">
|
||||
<item quantity="zero">في %d ساعة</item>
|
||||
<item quantity="one">خلال ساعة واحدة</item>
|
||||
<item quantity="two">خلال ساعتان</item>
|
||||
<item quantity="few">خلال %d ساعات</item>
|
||||
<item quantity="many">خلال %d ساعة</item>
|
||||
<item quantity="other">خلال %d ساعات</item>
|
||||
</plurals>
|
||||
<plurals name="x_hours_ago">
|
||||
<item quantity="zero">منذ %d ساعات</item>
|
||||
<item quantity="one">منذ ساعة واحدة</item>
|
||||
<item quantity="two">منذ ساعتان</item>
|
||||
<item quantity="few">منذ %d ساعات</item>
|
||||
<item quantity="many">منذ %d ساعة</item>
|
||||
<item quantity="other">منذ %d ساعات</item>
|
||||
</plurals>
|
||||
<string name="alt_text_reminder_title">تفتقد الوسائط إلى نص بديل</string>
|
||||
<plurals name="alt_text_reminder_x_images">
|
||||
<item quantity="zero">%s من صورك يفتقر إلى نص بديل. أتردد النشر على أي حال؟</item>
|
||||
<item quantity="one">%s من صورك يفتقر إلى نص بديل. أتردد النشر على أي حال؟</item>
|
||||
<item quantity="two">%s من صورك يفتقر إلى نص بديل. أتردد النشر على أي حال؟</item>
|
||||
<item quantity="few">%s من صورك يفتقر إلى نص بديل. أتردد النشر على أي حال؟</item>
|
||||
<item quantity="many">%s من صورك يفتقر إلى نص بديل. أتردد النشر على أي حال؟</item>
|
||||
<item quantity="other">%s من صورك يفتقر إلى نص بديل. أتردد النشر على أي حال؟</item>
|
||||
</plurals>
|
||||
<plurals name="alt_text_reminder_x_attachments">
|
||||
<item quantity="zero">%s من مرفقات الوسائط الخاصة بك يفتقر لنص بديل. نشر على أي حال؟</item>
|
||||
<item quantity="one">%s من مرفقات الوسائط الخاصة بك يفتقر لنص بديل. نشر على أي حال؟</item>
|
||||
<item quantity="two">%s من مرفقات الوسائط الخاصة بك يفتقر لنص بديل. نشر على أي حال؟</item>
|
||||
<item quantity="few">%s من مرفقات الوسائط الخاصة بك يفتقر لنص بديل. نشر على أي حال؟</item>
|
||||
<item quantity="many">%s من مرفقات الوسائط الخاصة بك يفتقر لنص بديل. نشر على أي حال؟</item>
|
||||
<item quantity="other">%s من مرفقات الوسائط الخاصة بك يفتقر لنص بديل. نشر على أي حال؟</item>
|
||||
</plurals>
|
||||
<string name="count_one">واحد</string>
|
||||
<string name="count_two">اثنان</string>
|
||||
<string name="count_three">ثلاثة</string>
|
||||
<string name="count_four">أربعة</string>
|
||||
<string name="alt_text_reminder_post_anyway">مَنشور</string>
|
||||
<!-- %s is the username -->
|
||||
<string name="unfollow_confirmation">أتريد إلغاء متابعة %s؟</string>
|
||||
<string name="filter_active">نشِط</string>
|
||||
<string name="filter_inactive">خامل</string>
|
||||
<string name="settings_add_filter">إضافة عامل تصفية</string>
|
||||
<string name="settings_edit_filter">تعديل عامل التصفية</string>
|
||||
<string name="settings_filter_duration">المدة</string>
|
||||
<string name="settings_filter_muted_words">الكلمات المحظورة</string>
|
||||
<string name="settings_filter_context">كتم الصوت من</string>
|
||||
<string name="settings_filter_show_cw">عرض مع تحذير المحتوى</string>
|
||||
<string name="settings_filter_show_cw_explanation">الاستمرار في عرض المشاركات التي تطابق هذا الفلتر، ولكن خلف تحذير حول المحتوى</string>
|
||||
<string name="settings_delete_filter">حذف عامل التصفية</string>
|
||||
<string name="filter_duration_forever">إلى الأبد</string>
|
||||
<!-- %s is the timestamp ("tomorrow at 12:34") -->
|
||||
<string name="settings_filter_ends">ينتهي %s</string>
|
||||
<plurals name="settings_x_muted_words">
|
||||
<item quantity="zero">%d كلمة أو عبارة مكتومة</item>
|
||||
<item quantity="one">%d كلمة أو عبارة مكتومة</item>
|
||||
<item quantity="two">%d كلمتان أو عبارتان مكتومتان</item>
|
||||
<item quantity="few">%d كلمة أو عبارة مكتومة</item>
|
||||
<item quantity="many">%d كلمة أو عبارة مكتومة</item>
|
||||
<item quantity="other">%d كلمة أو عبارة مكتومة</item>
|
||||
</plurals>
|
||||
<string name="selection_2_options">%1$s و %2$s</string>
|
||||
<string name="selection_3_options">%1$s و %2$s و %3$s</string>
|
||||
<string name="selection_4_or_more">%1$s, %2$s, و %3$d والمزيد</string>
|
||||
<string name="filter_context_home_lists">الخيط الزمني الرئيسي والقوائم</string>
|
||||
<string name="filter_context_notifications">الإشعارات</string>
|
||||
<string name="filter_context_public_timelines">الخيوط الزمنية العامة</string>
|
||||
<string name="filter_context_threads_replies">سلاسل المحادثات والردود</string>
|
||||
<string name="filter_context_profiles">الصفحات التعريفية</string>
|
||||
<string name="settings_filter_title">العنوان</string>
|
||||
<string name="settings_delete_filter_title">حذف عامل التصفية \"%s\"؟</string>
|
||||
<string name="settings_delete_filter_confirmation">سيتم حذف هذا الفلتر من حسابك على جميع الأجهزة.</string>
|
||||
<string name="add_muted_word">إضافة كلمة مكتومة</string>
|
||||
<string name="edit_muted_word">تحرير كلمة مكتومة</string>
|
||||
<string name="add">إضافة</string>
|
||||
<string name="filter_word_or_phrase">كلمة أو عبارة</string>
|
||||
<string name="filter_add_word_help">الكلمات غير حساسة لحالة الأحرف وتتطابق مع الكلمات الكاملة فقط.\n\nإذا قمت بتصفية الكلمة الرئيسية \"Apple\" ، فستخفي المشاركات التي تحتوي على \"apple\" أو \"aPpLe\" ولكن ليس \"pineapple.\"</string>
|
||||
<string name="settings_delete_filter_word">حذف الكلمة \"%s\"؟</string>
|
||||
<string name="enter_selection_mode">اختر</string>
|
||||
<string name="select_all">اختيار الكل</string>
|
||||
<string name="settings_filter_duration_title">مدة التصفية</string>
|
||||
<string name="filter_duration_custom">مخصص</string>
|
||||
<plurals name="settings_delete_x_filter_words">
|
||||
<item quantity="zero">حذف %d كلمات؟</item>
|
||||
<item quantity="one">حذف كلمة واحدة؟</item>
|
||||
<item quantity="two">حذف كلمتان؟</item>
|
||||
<item quantity="few">حذف %d كلمات؟</item>
|
||||
<item quantity="many">حذف %d كلمة؟</item>
|
||||
<item quantity="other">حذف %d كلمات؟</item>
|
||||
</plurals>
|
||||
<plurals name="x_items_selected">
|
||||
<item quantity="zero">تم تحديد %d</item>
|
||||
<item quantity="one">تم تحديد %d</item>
|
||||
<item quantity="two">%d تم تحديدها</item>
|
||||
<item quantity="few">%d تم تحديدها</item>
|
||||
<item quantity="many">%d تم تحديدها</item>
|
||||
<item quantity="other">%d تم تحديدها</item>
|
||||
</plurals>
|
||||
<string name="required_form_field_blank">لا يمكن أن يكون فارغاً</string>
|
||||
<string name="filter_word_already_in_list">موجود بالفعل في القائمة</string>
|
||||
<string name="app_update_ready">تحديث التطبيق جاهز</string>
|
||||
<string name="app_update_version">الإصدار %s</string>
|
||||
<string name="downloading_update">جارٍ التنزيل (%d%%)</string>
|
||||
<!-- Shown like a content warning, %s is the name of the filter -->
|
||||
<string name="post_matches_filter_x">تطابق عامل التصفية \"%s\"</string>
|
||||
<string name="search_mastodon">البحث في ماستدون</string>
|
||||
<string name="clear_all">امسح الكل</string>
|
||||
<string name="search_open_url">فتح الرابط التشعبي في ماستدون</string>
|
||||
<string name="posts_matching_hashtag">منشورات تحتوي على “%s”</string>
|
||||
<string name="search_go_to_account">الانتقال إلى %s</string>
|
||||
<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>
|
||||
<!-- %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>
|
||||
|
||||
@@ -4,11 +4,17 @@
|
||||
<string name="next">Далей</string>
|
||||
<string name="loading_instance">Атрыманне інфармацыі аб серверы…</string>
|
||||
<string name="error">Памылка</string>
|
||||
<string name="not_a_mastodon_instance">Здаецца, %s не з\'яўляецца серверам Mastodon.</string>
|
||||
<string name="ok">Добра</string>
|
||||
<string name="preparing_auth">Падрыхтоўка да аўтэнтыфікацыі…</string>
|
||||
<string name="finishing_auth">Завяршэнне аўтэнтыфікацыі…</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>
|
||||
<string name="user_sent_follow_request">%s адправіў вам запыт на падпіску</string>
|
||||
<string name="user_favorited">%s упадабаў ваш допіс</string>
|
||||
<string name="notification_boosted">%s пашырыў ваш допіс</string>
|
||||
<string name="share_toot_title">Абагуліць</string>
|
||||
<string name="settings">Налады</string>
|
||||
<string name="publish">Апублікаваць</string>
|
||||
@@ -34,6 +40,7 @@
|
||||
<string name="button_follow">Падпісацца</string>
|
||||
<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>
|
||||
@@ -97,6 +104,12 @@
|
||||
<item quantity="many">%d дзён засталося</item>
|
||||
<item quantity="other">%d дзён засталося</item>
|
||||
</plurals>
|
||||
<plurals name="x_votes">
|
||||
<item quantity="one">%,d голас</item>
|
||||
<item quantity="few">%,d галасы</item>
|
||||
<item quantity="many">%,d галасоў</item>
|
||||
<item quantity="other">%,d голаса</item>
|
||||
</plurals>
|
||||
<string name="poll_closed">Завершана</string>
|
||||
<string name="confirm_mute_title">Ігнараваць уліковы запіс</string>
|
||||
<string name="confirm_mute">Ігнараваць %s?</string>
|
||||
@@ -115,16 +128,19 @@
|
||||
<string name="button_blocked">Заблакіраваны</string>
|
||||
<string name="action_vote">Прагаласаваць</string>
|
||||
<string name="delete">Выдаліць</string>
|
||||
<string name="confirm_delete_title">Выдаліць допіс</string>
|
||||
<string name="confirm_delete">Вы ўпэўненыя, што хочаце выдаліць гэты допіс?</string>
|
||||
<string name="deleting">Выдаленне…</string>
|
||||
<string name="notification_channel_audio_player">Прайграванне аўдыя</string>
|
||||
<string name="play">Прайграць</string>
|
||||
<string name="pause">Прыпыніць</string>
|
||||
<string name="log_out">Выйсці</string>
|
||||
<string name="add_account">Дадаць уліковы запіс</string>
|
||||
<string name="search_hint">Пошук</string>
|
||||
<string name="hashtags">Хэштэгі</string>
|
||||
<string name="news">Навіны</string>
|
||||
<string name="for_you">Для вас</string>
|
||||
<string name="all_notifications">Усе</string>
|
||||
<string name="mentions">Згадванні</string>
|
||||
<plurals name="x_people_talking">
|
||||
<item quantity="one">%d чалавек размаўляе</item>
|
||||
@@ -133,11 +149,16 @@
|
||||
<item quantity="other">%d чалавек размаўляе</item>
|
||||
</plurals>
|
||||
<string name="report_title">Паскардзіцца на %s</string>
|
||||
<string name="report_choose_reason">Што не так з гэтым допісам?</string>
|
||||
<string name="report_choose_reason_account">Што не так з %s?</string>
|
||||
<string name="report_choose_reason_subtitle">Выберыце найлепшы варыянт</string>
|
||||
<string name="report_reason_personal">Мне не падабаецца</string>
|
||||
<string name="report_reason_personal_subtitle">Гэта не тое, што вы хочаце бачыць</string>
|
||||
<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_other">Гэта нешта іншае</string>
|
||||
<string name="report_reason_other_subtitle">Гэта праблема не падпадае ні пад адну з катэгорыі</string>
|
||||
<string name="report_choose_rule">Якія правілы былі парушаны?</string>
|
||||
<string name="report_choose_rule_subtitle">Абярыце ўсе варыянты, што падыходзяць</string>
|
||||
@@ -146,8 +167,14 @@
|
||||
<string name="report_comment_title">Што-небудзь яшчэ, што мы павінны ведаць?</string>
|
||||
<string name="report_comment_hint">Дадатковыя каментарыі</string>
|
||||
<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">Адпісацца</string>
|
||||
<string name="mute_user_explain">Вы не будзеце бачыць допісы гэтага карыстальніка. Ён усё яшчэ зможа сачыць за вамі і бачыць вашы допісы, не ведаючы, што яго ігнаруюць.</string>
|
||||
<string name="block_user_explain">Вы перастанеце бачыць допісы гэтага карыстальніка. Ён не зможа сачыць за вамі і бачыць вашы допісы. Ён зможа зразумець, што яго заблакіравалі.</string>
|
||||
<string name="report_personal_title">Не хочаце бачыць гэта?</string>
|
||||
<string name="report_personal_subtitle">Вось вашыя варыянты кантролю над тым, што вы бачыце в Mastodon:</string>
|
||||
<string name="back">Назад</string>
|
||||
<string name="search_communities">Назва сервера або URL</string>
|
||||
<string name="instance_rules_title">Правілы сервера</string>
|
||||
@@ -174,23 +201,30 @@
|
||||
<string name="category_tech">Тэхналогіі</string>
|
||||
<string name="confirm_email_title">Праверце паштовую скрыню</string>
|
||||
<!-- %s is the email address -->
|
||||
<string name="confirm_email_subtitle">Націсніце на спасылку, якую мы адправілі, каб спраўдзіць %s. Мы вас пачакаем тут.</string>
|
||||
<string name="confirm_email_didnt_get">Не атрымалі спасылку?</string>
|
||||
<string name="resend">Адправіць паўторна</string>
|
||||
<string name="open_email_app">Адкрыць праграму для пошты</string>
|
||||
<string name="resent_email">Электронны ліст з пацвярджэннем адпраўлены</string>
|
||||
<string name="compose_hint">Напішыце тое, аб чым думаеце</string>
|
||||
<string name="content_warning">Папярэджанне аб змесціве</string>
|
||||
<string name="save">Захаваць</string>
|
||||
<string name="add_alt_text">Дадаць альтэрнатыўны тэкст</string>
|
||||
<string name="visibility_public">Публічны</string>
|
||||
<string name="visibility_followers_only">Толькі для падпісчыкаў</string>
|
||||
<string name="visibility_private">Толькі людзі, якіх згадалі</string>
|
||||
<string name="recent_searches">Нядаўняе</string>
|
||||
<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_mention">Згадванні</string>
|
||||
<string name="notification_type_poll">Апытанні</string>
|
||||
<string name="choose_account">Выберыце ўліковы запіс</string>
|
||||
<string name="err_not_logged_in">Спачатку ўвайдзіце ў Mastodon</string>
|
||||
<string name="media_attachment_unsupported_type">Тып файла %s не падтрымліваецца</string>
|
||||
<string name="media_attachment_too_big">Памер файла %1$s перавышае абмежаванне ў %2$s МБ</string>
|
||||
<string name="settings_theme">Знешні выгляд</string>
|
||||
<string name="theme_light">Светлая</string>
|
||||
<string name="theme_dark">Цёмная</string>
|
||||
<string name="settings_behavior">Паводзіны</string>
|
||||
@@ -203,9 +237,11 @@
|
||||
<string name="settings_clear_cache">Ачысціць кэш медыя</string>
|
||||
<string name="settings_app_version">Mastodon для Android v%1$s (%2$d)</string>
|
||||
<string name="media_cache_cleared">Кэш медыя ачышчаны</string>
|
||||
<string name="avatar_description">Перайсці да профілю %s</string>
|
||||
<string name="more_options">Больш опцый</string>
|
||||
<string name="new_post">Новы допіс</string>
|
||||
<string name="button_reply">Адказаць</string>
|
||||
<string name="button_reblog">Пашырыць</string>
|
||||
<string name="button_favorite">Абранае</string>
|
||||
<string name="button_share">Абагуліць</string>
|
||||
<string name="media_no_description">Медыя без апісання</string>
|
||||
@@ -217,8 +253,11 @@
|
||||
<string name="media_viewer">Праграма для прагляду медыя</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="signup_reason">Чаму вы хочаце далучыцца?</string>
|
||||
<string name="signup_reason_note">Гэта дапаможа нам разгледзець вашу заяўку.</string>
|
||||
<string name="clear">Ачысціць</string>
|
||||
@@ -232,6 +271,7 @@
|
||||
<string name="error_saving_file">Памылка пры захаванні файла</string>
|
||||
<string name="file_saved">Файл захаваны</string>
|
||||
<string name="downloading">Спампоўванне…</string>
|
||||
<string name="local_timeline">Лакальнае</string>
|
||||
<!-- %s is the server domain -->
|
||||
<string name="see_new_posts">Паказаць новыя допісы</string>
|
||||
<string name="load_missing_posts">Загрузіць адсутныя допісы</string>
|
||||
@@ -258,6 +298,12 @@
|
||||
<item quantity="many">%,d абраных</item>
|
||||
<item quantity="other">%,d абраных</item>
|
||||
</plurals>
|
||||
<plurals name="x_reblogs">
|
||||
<item quantity="one">%,d пашырэнне</item>
|
||||
<item quantity="few">%,d пашырэнні</item>
|
||||
<item quantity="many">%,d пашырэнняў</item>
|
||||
<item quantity="other">%,d пашырэння</item>
|
||||
</plurals>
|
||||
<string name="timestamp_via_app">%1$s праз %2$s</string>
|
||||
<string name="time_now">толькі што</string>
|
||||
<string name="edit_history">Гісторыя рэдагавання</string>
|
||||
@@ -328,6 +374,7 @@
|
||||
<string name="server_filter_region_oceania">Акіянія</string>
|
||||
<string name="not_accepting_new_members">Не прымае новых удзельнікаў</string>
|
||||
<string name="category_special_interests">Асаблівыя інтарэсы</string>
|
||||
<string name="signup_passwords_dont_match">Паролі не супадаюць</string>
|
||||
<string name="pick_server_for_me">Падбяры для мяне</string>
|
||||
<string name="profile_add_row">Дадаць радок</string>
|
||||
<string name="profile_setup">Налады профілю</string>
|
||||
@@ -336,21 +383,150 @@
|
||||
<string name="popular_on_mastodon">Папулярна на Mastodon</string>
|
||||
<string name="follow_all">Падпісацца на ўсіх</string>
|
||||
<string name="server_rules_disagree">Не згодны</string>
|
||||
<string name="privacy_policy_explanation">Мы нічога не збіраем і не апрацоўваем.</string>
|
||||
<!-- %s is server domain -->
|
||||
<string name="server_policy_disagree">Не згодны з %s</string>
|
||||
<string name="profile_bio">Пра мяне</string>
|
||||
<!-- Shown in a progress dialog when you tap "follow all" -->
|
||||
<string name="sending_follows">Падпісваемся…</string>
|
||||
<!-- %1$s is server domain, %2$s is email domain. You can reorder these placeholders to fit your language better. -->
|
||||
<string name="spoiler_show">Усё адно паказаць</string>
|
||||
<string name="save_changes">Захаваць змены</string>
|
||||
<string name="profile_featured">Рэкамендаванае</string>
|
||||
<string name="view_all">Праглядзець усё</string>
|
||||
<string name="profile_endorsed_accounts">Уліковыя запісы</string>
|
||||
<string name="show">Паказаць</string>
|
||||
<string name="hide">Схаваць</string>
|
||||
<string name="join_default_server">Далучыцца да %s</string>
|
||||
<string name="pick_server">Выбраць іншы сервер</string>
|
||||
<string name="signup_or_login">або</string>
|
||||
<string name="learn_more">Даведацца больш</string>
|
||||
<string name="welcome_to_mastodon">Вітаем у Mastodon</string>
|
||||
<string name="welcome_paragraph1">Mastodon - гэта дэцэнтралізаваная сацыяльная сетка, што азначае, што ні адна кампанія не кантралюе яе. Яна складаецца з мноства незалежна працуючых сервераў, злучаных разам.</string>
|
||||
<string name="what_are_servers">Што такое серверы?</string>
|
||||
<string name="retry">Паўтарыць</string>
|
||||
<!-- %s is formatted file size ("467 KB image") -->
|
||||
<string name="attachment_type_video">Відэа</string>
|
||||
<string name="attachment_type_gif">GIF</string>
|
||||
<string name="attachment_type_unknown">Файл</string>
|
||||
<string name="poll_style">Стыль</string>
|
||||
<string name="help">Даведка</string>
|
||||
<string name="edit_post">Рэдагаваць допіс</string>
|
||||
<string name="no_verified_link">Няма спраўджанай спасылкі</string>
|
||||
<string name="language">Мова</string>
|
||||
<string name="language_default">Перадвызначана</string>
|
||||
<string name="language_system">Сістэма</string>
|
||||
<string name="media_hidden">Медыя схавана</string>
|
||||
<string name="post_hidden">Допіс схаваны</string>
|
||||
<string name="report_title_post">Паскардзіцца на допіс</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="settings_display">Адлюстраванне</string>
|
||||
<string name="settings_filters">Фільтры</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">Аб %s</string>
|
||||
<string name="settings_confirm_boost">Пытаць перад пашырэннем</string>
|
||||
<string name="pause_all_notifications">Прыпыніць усе</string>
|
||||
<string name="notifications_policy_anyone">Кожны</string>
|
||||
<string name="notifications_policy_no_one">Ніхто</string>
|
||||
<string name="settings_notifications_policy">Атрымліваць апавяшчэнні ад</string>
|
||||
<string name="notification_type_mentions_and_replies">Згадванні і адказы</string>
|
||||
<string name="pause_all_notifications_title">Прыпыніць усе апавяшчэнні</string>
|
||||
<plurals name="x_weeks">
|
||||
<item quantity="one">%d тыдзень</item>
|
||||
<item quantity="few">%d тыдні</item>
|
||||
<item quantity="many">%d тыдняў</item>
|
||||
<item quantity="other">%d тыдні</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 а %2$s</string>
|
||||
<string name="today">сёння</string>
|
||||
<string name="yesterday">учора</string>
|
||||
<string name="tomorrow">заўтра</string>
|
||||
<!-- %s is the timestamp ("tomorrow at 12:34") -->
|
||||
<string name="pause_notifications_ends">Скончыцца %s</string>
|
||||
<!-- %s is the timestamp ("tomorrow at 12:34") -->
|
||||
<string name="about_server">Пра сервер</string>
|
||||
<string name="server_rules">Правілы</string>
|
||||
<string name="server_administrator">Адміністратар</string>
|
||||
<plurals name="in_x_seconds">
|
||||
<item quantity="one">праз %d секунду</item>
|
||||
<item quantity="few">праз %d секунды</item>
|
||||
<item quantity="many">праз %d секунд</item>
|
||||
<item quantity="other">праз %d секунды</item>
|
||||
</plurals>
|
||||
<plurals name="in_x_minutes">
|
||||
<item quantity="one">праз %d хвіліну</item>
|
||||
<item quantity="few">праз %d хвіліны</item>
|
||||
<item quantity="many">праз %d хвілін</item>
|
||||
<item quantity="other">праз %d хвіліны</item>
|
||||
</plurals>
|
||||
<plurals name="in_x_hours">
|
||||
<item quantity="one">праз %d гадзіну</item>
|
||||
<item quantity="few">праз %d гадзіны</item>
|
||||
<item quantity="many">праз %d гадзін</item>
|
||||
<item quantity="other">праз %d гадзіны</item>
|
||||
</plurals>
|
||||
<plurals name="x_hours_ago">
|
||||
<item quantity="one">%d гадзіна таму</item>
|
||||
<item quantity="few">%d гадзіны таму</item>
|
||||
<item quantity="many">%d гадзін таму</item>
|
||||
<item quantity="other">%d гадзіны таму</item>
|
||||
</plurals>
|
||||
<string name="count_one">Адзін</string>
|
||||
<string name="count_two">Два</string>
|
||||
<string name="count_three">Тры</string>
|
||||
<string name="count_four">Чатыры</string>
|
||||
<string name="alt_text_reminder_post_anyway">Допіс</string>
|
||||
<!-- %s is the username -->
|
||||
<string name="filter_active">Актыўны</string>
|
||||
<string name="filter_inactive">Неактыўны</string>
|
||||
<string name="settings_add_filter">Дадаць фільтр</string>
|
||||
<string name="settings_edit_filter">Рэдагаваць фільтр</string>
|
||||
<string name="settings_filter_duration">Працягласць</string>
|
||||
<string name="settings_filter_muted_words">Ігнараваныя словы</string>
|
||||
<string name="settings_delete_filter">Выдаліць фільтр</string>
|
||||
<string name="filter_duration_forever">Назаўсёды</string>
|
||||
<!-- %s is the timestamp ("tomorrow at 12:34") -->
|
||||
<string name="settings_filter_ends">Скончыцца %s</string>
|
||||
<string name="selection_2_options">%1$s і %2$s</string>
|
||||
<string name="selection_3_options">%1$s, %2$s і %3$s</string>
|
||||
<string name="filter_context_notifications">Апавяшчэнні</string>
|
||||
<string name="filter_context_public_timelines">Публічныя стужкі</string>
|
||||
<string name="filter_context_profiles">Профілі</string>
|
||||
<string name="settings_filter_title">Загаловак</string>
|
||||
<string name="settings_delete_filter_title">Выдаліць фільтр \"%s\"?</string>
|
||||
<string name="add">Дадаць</string>
|
||||
<string name="filter_word_or_phrase">Слова або фраза</string>
|
||||
<string name="settings_delete_filter_word">Выдаліць слова \"%s\"?</string>
|
||||
<string name="enter_selection_mode">Выбраць</string>
|
||||
<string name="select_all">Выбраць усё</string>
|
||||
<string name="settings_filter_duration_title">Працягласць фільтра</string>
|
||||
<plurals name="settings_delete_x_filter_words">
|
||||
<item quantity="one">Выдаліць %d слова?</item>
|
||||
<item quantity="few">Выдаліць %d словы?</item>
|
||||
<item quantity="many">Выдаліць %d словаў?</item>
|
||||
<item quantity="other">Выдаліць %d слова?</item>
|
||||
</plurals>
|
||||
<string name="required_form_field_blank">Не можа быць пустым</string>
|
||||
<string name="filter_word_already_in_list">Ужо ў спісе</string>
|
||||
<string name="app_update_ready">Абнаўленне праграмы гатова</string>
|
||||
<string name="app_update_version">Версія %s</string>
|
||||
<string name="downloading_update">Спампаванне (%d%%)</string>
|
||||
<!-- Shown like a content warning, %s is the name of the filter -->
|
||||
<string name="post_matches_filter_x">Адпавядае фільтру \"%s\"</string>
|
||||
<string name="search_mastodon">Пошук у Mastodon</string>
|
||||
<string name="clear_all">Ачысціць усё</string>
|
||||
<string name="search_open_url">Адкрыць спасылку ў Mastodon</string>
|
||||
<string name="posts_matching_hashtag">Допісы з “%s“</string>
|
||||
<string name="search_go_to_account">Перайсці да %s</string>
|
||||
<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>
|
||||
<!-- %s is the name of the post language -->
|
||||
<!-- %1$s is the language, %2$s is the name of the translation service -->
|
||||
</resources>
|
||||
|
||||
@@ -2,13 +2,17 @@
|
||||
<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>
|
||||
<string name="in_reply_to">%s কে উত্তর দিন</string>
|
||||
<string name="notifications">নোটিফিকেশন</string>
|
||||
<string name="user_followed_you">%s আপনাকে ফলো করেছেন</string>
|
||||
<string name="user_sent_follow_request">%s আপনাকে ফলো করার অনুরোধ পাঠিয়েছেন</string>
|
||||
<string name="share_toot_title">শেয়ার করুন</string>
|
||||
<string name="settings">সেটিংস</string>
|
||||
<string name="discard">বাতিল করুন</string>
|
||||
<string name="cancel">বাতিল করুন</string>
|
||||
<plurals name="followers">
|
||||
<item quantity="one">জন ফলোয়ার</item>
|
||||
@@ -62,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>
|
||||
@@ -92,7 +100,19 @@
|
||||
<item quantity="one">%d জন ব্যক্তি বলছেন</item>
|
||||
<item quantity="other">%d jon ব্যক্তিরা বলছেন</item>
|
||||
</plurals>
|
||||
<string name="report_title">%s -এর নামে অভিযোগ করুন</string>
|
||||
<string name="report_choose_reason">এই পোস্টে ভুল কি?</string>
|
||||
<string name="report_reason_personal">আমার এটি ভালো লাগছে না</string>
|
||||
<string name="report_reason_spam">এটি স্প্যাম</string>
|
||||
<string name="report_reason_violation">এটি সার্ভারের নিয়ম ভাঙছে</string>
|
||||
<string name="report_reason_other">এটি অন্য কিছু</string>
|
||||
<string name="report_choose_rule">কোন নিয়মটা ভেঙেছে?</string>
|
||||
<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">আনফলো করুন</string>
|
||||
<string name="report_personal_title">আপনি এটি আর দেখতে চান না?</string>
|
||||
<string name="back">ফিরে যান</string>
|
||||
<string name="search_communities">সার্ভারের নাম বা লিঙ্ক</string>
|
||||
<string name="instance_rules_title">সার্ভারের নিয়মাবলী</string>
|
||||
@@ -102,9 +122,63 @@
|
||||
<string name="email">ই-মেইল</string>
|
||||
<string name="password">পাসওয়ার্ড</string>
|
||||
<string name="confirm_password">পাসওয়ার্ড নিশ্চিত করুন</string>
|
||||
<string name="category_lgbt">LGBT</string>
|
||||
<string name="category_music">সঙ্গীত</string>
|
||||
<string name="category_regional">আঞ্চলিক</string>
|
||||
<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>
|
||||
<plurals name="cant_add_more_than_x_attachments">
|
||||
<item quantity="one">আপনি %d -এর বেশি মিডিয়া/ফাইল যোগ করতে পারবেন না</item>
|
||||
<item quantity="other">আপনি %d -এর বেশি মিডিয়া/ফাইল যোগ করতে পারবেন না</item>
|
||||
</plurals>
|
||||
<string name="media_attachment_too_big">%1$s ফাইল %2$s MB-র ফাইলের সাইজ সীমা ছড়িয়ে যাচ্ছে</string>
|
||||
<string name="theme_light">লাইট</string>
|
||||
<string name="theme_dark">ডার্ক</string>
|
||||
<string name="settings_notifications">নোটিফিকেশনগুলো</string>
|
||||
<string name="settings_contribute">Mastodon-কে সাহায্য করুন</string>
|
||||
<string name="new_post">নতুন পোস্ট</string>
|
||||
<string name="button_reply">উত্তর দিন</string>
|
||||
<string name="button_favorite">প্রিয়</string>
|
||||
<string name="button_share">শেয়ার করুন</string>
|
||||
<string name="media_no_description">কোনো বিবরণ ছাড়া ফাইল/মিডিয়া</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="signup_reason">আপনি কেন যুক্ত হতে চান?</string>
|
||||
<string name="signup_reason_note">এটি আমাদেরকে আপনার আবেদন পুনর্বিবেচনা ও পর্যালোচনা করতে সাহায্য করবে.</string>
|
||||
<string name="profile_picture">প্রোফাইলের ছবি</string>
|
||||
<string name="download">ডাউনলোড করুন</string>
|
||||
<string name="permission_required">অনুমতি প্রয়োজন</string>
|
||||
<string name="storage_permission_to_download">এই ফাইলটি সেভ করতে অ্যাপটির আপনার স্টোরেজ অ্যাক্সেসের অনুমতি প্রয়োজন.</string>
|
||||
<string name="open_settings">সেটিংস খুলুন</string>
|
||||
<string name="error_saving_file">ফাইল সেভ করতে ত্রুটি দেখা দিচ্ছে</string>
|
||||
<string name="file_saved">ফাইল সেভ হয়েছে</string>
|
||||
<string name="downloading">ডাউনলোড হচ্ছে…</string>
|
||||
<!-- %s is the server domain -->
|
||||
<string name="button_follow_pending">বাকি আছে</string>
|
||||
<string name="follows_you">আপনাকে ফলো করছেন</string>
|
||||
<!-- translators: %,d is a valid placeholder, it formats the number with locale-dependent grouping separators -->
|
||||
<plurals name="x_followers">
|
||||
<item quantity="one">%,d জন ফলোয়ার</item>
|
||||
<item quantity="other">%,d জন ফলোয়ার</item>
|
||||
</plurals>
|
||||
<string name="time_just_now">এইমাত্র</string>
|
||||
<plurals name="x_seconds_ago">
|
||||
<item quantity="one">%d সেকেন্ড আগে</item>
|
||||
<item quantity="other">%d সেকেন্ড আগে</item>
|
||||
</plurals>
|
||||
<plurals name="x_minutes_ago">
|
||||
<item quantity="one">%d মিনিট আগে</item>
|
||||
<item quantity="other">%d মিনিট আগে</item>
|
||||
</plurals>
|
||||
<!-- %s is version like 1.2.3 -->
|
||||
<!-- %s is version like 1.2.3 -->
|
||||
<!-- %s is file size -->
|
||||
@@ -114,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 -->
|
||||
@@ -126,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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -105,6 +105,12 @@
|
||||
<item quantity="many">Zbývá %d dní</item>
|
||||
<item quantity="other">Zbývá %d dní</item>
|
||||
</plurals>
|
||||
<plurals name="x_votes">
|
||||
<item quantity="one">%,d hlas</item>
|
||||
<item quantity="few">%,d hlasující</item>
|
||||
<item quantity="many">%,d hlasujících</item>
|
||||
<item quantity="other">%,d hlasů</item>
|
||||
</plurals>
|
||||
<string name="poll_closed">Uzavřeno</string>
|
||||
<string name="confirm_mute_title">Skrýt účet</string>
|
||||
<string name="confirm_mute">Potvrdit skrytí %s</string>
|
||||
@@ -217,6 +223,12 @@
|
||||
<string name="notification_type_poll">Ankety</string>
|
||||
<string name="choose_account">Vybrat účet</string>
|
||||
<string name="err_not_logged_in">Nejprve se přihlaste do Mastodonu</string>
|
||||
<plurals name="cant_add_more_than_x_attachments">
|
||||
<item quantity="one">Nelze přidat více než %d multimediální přílohu</item>
|
||||
<item quantity="few">Nelze přidat více než %d multimediální přílohy</item>
|
||||
<item quantity="many">Nelze přidat více než %d multimediálních příloh</item>
|
||||
<item quantity="other">Nelze přidat více než %d multimediálních příloh</item>
|
||||
</plurals>
|
||||
<string name="media_attachment_unsupported_type">Soubor %s nepatří mezi podporované typy</string>
|
||||
<string name="media_attachment_too_big">Soubor %1$s překračuje limit velikosti %2$s MB</string>
|
||||
<string name="settings_theme">Vzhled</string>
|
||||
@@ -301,6 +313,12 @@
|
||||
<item quantity="many">%,d oblíbení</item>
|
||||
<item quantity="other">%,d oblíbení</item>
|
||||
</plurals>
|
||||
<plurals name="x_reblogs">
|
||||
<item quantity="one">%,d boost</item>
|
||||
<item quantity="few">%,d boosty</item>
|
||||
<item quantity="many">%,d boostů</item>
|
||||
<item quantity="other">%,d boostů</item>
|
||||
</plurals>
|
||||
<string name="timestamp_via_app">%1$s přes %2$s</string>
|
||||
<string name="time_now">teď</string>
|
||||
<string name="edit_history">Historie úprav</string>
|
||||
@@ -407,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>
|
||||
@@ -480,6 +497,12 @@
|
||||
<string name="settings_notifications_policy">Dostávat oznámení od</string>
|
||||
<string name="notification_type_mentions_and_replies">Zmínění a odpovědi</string>
|
||||
<string name="pause_all_notifications_title">Pozastavit všechna oznámení</string>
|
||||
<plurals name="x_weeks">
|
||||
<item quantity="one">%d týden</item>
|
||||
<item quantity="few">%d týdny</item>
|
||||
<item quantity="many">%d týdnů</item>
|
||||
<item quantity="other">%d týdnů</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 v %2$s</string>
|
||||
<string name="today">dnes</string>
|
||||
@@ -501,7 +524,43 @@
|
||||
<string name="settings_hide_sensitive_media">Zakrýt média označená jako citlivá</string>
|
||||
<string name="settings_show_interaction_counts">Počet interakcí příspěvku</string>
|
||||
<string name="settings_show_emoji_in_names">Vlastní emoji v zobrazených jménech</string>
|
||||
<plurals name="in_x_seconds">
|
||||
<item quantity="one">za %d vteřinu</item>
|
||||
<item quantity="few">za %d vteřiny</item>
|
||||
<item quantity="many">za %d vteřin</item>
|
||||
<item quantity="other">za %d vteřin</item>
|
||||
</plurals>
|
||||
<plurals name="in_x_minutes">
|
||||
<item quantity="one">za %d minutu</item>
|
||||
<item quantity="few">za %d minuty</item>
|
||||
<item quantity="many">za %d minut</item>
|
||||
<item quantity="other">za %d minut</item>
|
||||
</plurals>
|
||||
<plurals name="in_x_hours">
|
||||
<item quantity="one">za %d hodinu</item>
|
||||
<item quantity="few">za %d hodiny</item>
|
||||
<item quantity="many">za %d hodin</item>
|
||||
<item quantity="other">za %d hodin</item>
|
||||
</plurals>
|
||||
<plurals name="x_hours_ago">
|
||||
<item quantity="one">před %d hodinou</item>
|
||||
<item quantity="few">před %d hodinami</item>
|
||||
<item quantity="many">před %d hodinami</item>
|
||||
<item quantity="other">před %d hodinami</item>
|
||||
</plurals>
|
||||
<string name="alt_text_reminder_title">Média nemají alternativní text</string>
|
||||
<plurals name="alt_text_reminder_x_images">
|
||||
<item quantity="one">%s z vašich obrázků nemá alternativní text. Přesto odeslat?</item>
|
||||
<item quantity="few">%s z vašich obrázků nemají alternativní text. Přesto odeslat?</item>
|
||||
<item quantity="many">%s z vašich obrázků nemá alternativní text. Přesto odeslat?</item>
|
||||
<item quantity="other">%s z vašich obrázků nemá alternativní text. Přesto odeslat?</item>
|
||||
</plurals>
|
||||
<plurals name="alt_text_reminder_x_attachments">
|
||||
<item quantity="one">%s z vašich multimediálních příloh nemá alternativní text. Přesto odeslat?</item>
|
||||
<item quantity="few">%s z vašich multimediálních příloh nemají alternativní text. Přesto odeslat?</item>
|
||||
<item quantity="many">%s z vašich multimediálních příloh nemá alternativní text. Přesto odeslat?</item>
|
||||
<item quantity="other">%s z vašich multimediálních příloh nemá alternativní text. Přesto odeslat?</item>
|
||||
</plurals>
|
||||
<string name="count_one">Jeden</string>
|
||||
<string name="count_two">Dva</string>
|
||||
<string name="count_three">Tři</string>
|
||||
@@ -522,6 +581,12 @@
|
||||
<string name="filter_duration_forever">Napořád</string>
|
||||
<!-- %s is the timestamp ("tomorrow at 12:34") -->
|
||||
<string name="settings_filter_ends">Končí %s</string>
|
||||
<plurals name="settings_x_muted_words">
|
||||
<item quantity="one">%d ztišené slovo nebo fráze</item>
|
||||
<item quantity="few">%d ztišená slova nebo fráze</item>
|
||||
<item quantity="many">%d ztišených slov nebo frází</item>
|
||||
<item quantity="other">%d ztišených slov nebo fráze</item>
|
||||
</plurals>
|
||||
<string name="selection_2_options">%1$s a %2$s</string>
|
||||
<string name="selection_3_options">%1$s, %2$s a %3$s</string>
|
||||
<string name="selection_4_or_more">%1$s, %2$s a %3$d další</string>
|
||||
@@ -543,6 +608,18 @@
|
||||
<string name="select_all">Vybrat vše</string>
|
||||
<string name="settings_filter_duration_title">Doba použití filtru</string>
|
||||
<string name="filter_duration_custom">Vlastní</string>
|
||||
<plurals name="settings_delete_x_filter_words">
|
||||
<item quantity="one">Smazat %d slovo?</item>
|
||||
<item quantity="few">Smazat %d slova?</item>
|
||||
<item quantity="many">Smazat %d slov?</item>
|
||||
<item quantity="other">Smazat %d slov?</item>
|
||||
</plurals>
|
||||
<plurals name="x_items_selected">
|
||||
<item quantity="one">%d vybráno</item>
|
||||
<item quantity="few">%d vybrány</item>
|
||||
<item quantity="many">%d vybraných</item>
|
||||
<item quantity="other">%d vybraných</item>
|
||||
</plurals>
|
||||
<string name="required_form_field_blank">Nemůže být prázdné</string>
|
||||
<string name="filter_word_already_in_list">Již v seznamu</string>
|
||||
<string name="app_update_ready">Je připravena aktualizace aplikace</string>
|
||||
@@ -562,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>
|
||||
|
||||
@@ -4,18 +4,24 @@
|
||||
<string name="next">Næste</string>
|
||||
<string name="loading_instance">Henter serverinfo…</string>
|
||||
<string name="error">Fejl</string>
|
||||
<string name="ok">Ok</string>
|
||||
<string name="not_a_mastodon_instance">%s lader ikke til at være en Mastodon-server.</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="preparing_auth">Forbereder godkendelse…</string>
|
||||
<string name="finishing_auth">Afslutter godkendelse…</string>
|
||||
<string name="user_boosted">%s fremhævede</string>
|
||||
<string name="in_reply_to">Som svar til %s</string>
|
||||
<string name="notifications">Meddelelser</string>
|
||||
<string name="notifications">Notifikationer</string>
|
||||
<string name="user_followed_you">%s begyndte at følge dig</string>
|
||||
<string name="user_sent_follow_request">%s har sendt dig en følgeanmodning</string>
|
||||
<string name="user_favorited">%s favoritmarkerede dit indlæg</string>
|
||||
<string name="notification_boosted">%s boostede dit indlæg</string>
|
||||
<string name="poll_ended">Se resultaterne af en afstemning, hvori du deltog</string>
|
||||
<string name="share_toot_title">Del</string>
|
||||
<string name="settings">Indstillinger</string>
|
||||
<string name="publish">Offentliggør</string>
|
||||
<string name="publish">Publicér</string>
|
||||
<string name="discard_draft">Kassér kladde?</string>
|
||||
<string name="discard">Kassér</string>
|
||||
<string name="cancel">Fortryd</string>
|
||||
<string name="cancel">Afbryd</string>
|
||||
<plurals name="followers">
|
||||
<item quantity="one">følger</item>
|
||||
<item quantity="other">følgere</item>
|
||||
@@ -31,13 +37,14 @@
|
||||
<string name="button_follow">Følg</string>
|
||||
<string name="button_following">Følger</string>
|
||||
<string name="edit_profile">Redigér profil</string>
|
||||
<string name="mute_user">Skjul %s (mute)</string>
|
||||
<string name="unmute_user">Vis %s igen (unmute)</string>
|
||||
<string name="block_user">Bloker %s</string>
|
||||
<string name="unblock_user">Fjern blokering af %s</string>
|
||||
<string name="report_user">Indberet %s</string>
|
||||
<string name="block_domain">Bloker %s</string>
|
||||
<string name="unblock_domain">Fjern blokering af %s</string>
|
||||
<string name="share_user">Del profil</string>
|
||||
<string name="mute_user">Gør tavs %s</string>
|
||||
<string name="unmute_user">Vis %s igen</string>
|
||||
<string name="block_user">Blokér %s</string>
|
||||
<string name="unblock_user">Afblokér %s</string>
|
||||
<string name="report_user">Anmeld %s</string>
|
||||
<string name="block_domain">Blokér %s</string>
|
||||
<string name="unblock_domain">Afblokér %s</string>
|
||||
<plurals name="x_posts">
|
||||
<item quantity="one">%,d indlæg</item>
|
||||
<item quantity="other">%,d indlæg</item>
|
||||
@@ -45,7 +52,7 @@
|
||||
<string name="profile_joined">Tilmeldt</string>
|
||||
<string name="done">Udført</string>
|
||||
<string name="loading">Indlæser…</string>
|
||||
<string name="field_label">Mærkat</string>
|
||||
<string name="field_label">Etiket</string>
|
||||
<string name="field_content">Indhold</string>
|
||||
<string name="saving">Gemmer…</string>
|
||||
<string name="post_from_user">Indlæg fra %s</string>
|
||||
@@ -78,66 +85,84 @@
|
||||
<item quantity="one">%d dag tilbage</item>
|
||||
<item quantity="other">%d dage tilbage</item>
|
||||
</plurals>
|
||||
<plurals name="x_votes">
|
||||
<item quantity="one">%,d stemme</item>
|
||||
<item quantity="other">%,d stemmer</item>
|
||||
</plurals>
|
||||
<string name="poll_closed">Lukket</string>
|
||||
<string name="confirm_mute_title">Skjul konto</string>
|
||||
<string name="confirm_mute">Bekræft at du vil skjule %s</string>
|
||||
<string name="do_mute">Skjul (mute)</string>
|
||||
<string name="confirm_unmute_title">Vis bruger igen (unmute)</string>
|
||||
<string name="confirm_unmute">Bekræft at du vil se %s igen</string>
|
||||
<string name="do_unmute">Vis igen (unmute)</string>
|
||||
<string name="confirm_block_title">Bloker bruger</string>
|
||||
<string name="confirm_block_domain_title">Bloker domæne</string>
|
||||
<string name="confirm_block">Bekræft at du vil blokere %s</string>
|
||||
<string name="do_block">Bloker</string>
|
||||
<string name="confirm_unblock_title">Fjern blokering af bruger</string>
|
||||
<string name="confirm_unblock_domain_title">Fjern blokering af domæne</string>
|
||||
<string name="confirm_unblock">Bekræft at du vil fjerne blokering af %s</string>
|
||||
<string name="do_unblock">Fjern blokering</string>
|
||||
<string name="confirm_mute_title">Tavsgør konto</string>
|
||||
<string name="confirm_mute">Bekræft tavsgørelse af %s</string>
|
||||
<string name="do_mute">Tavsgør</string>
|
||||
<string name="confirm_unmute_title">Vis konto igen</string>
|
||||
<string name="confirm_unmute">Bekræft, at %s ikke længere er tavsgjort</string>
|
||||
<string name="do_unmute">Ophæv tavsgørelse</string>
|
||||
<string name="confirm_block_title">Blokér konto</string>
|
||||
<string name="confirm_block_domain_title">Blokér domæne</string>
|
||||
<string name="confirm_block">Bekræft blokering af %s</string>
|
||||
<string name="do_block">Blokér</string>
|
||||
<string name="confirm_unblock_title">Afblokér konto</string>
|
||||
<string name="confirm_unblock_domain_title">Afblokér domæne</string>
|
||||
<string name="confirm_unblock">Bekræft afblokeringen af %s</string>
|
||||
<string name="do_unblock">Afblokér</string>
|
||||
<string name="button_blocked">Blokeret</string>
|
||||
<string name="action_vote">Stem</string>
|
||||
<string name="delete">Slet</string>
|
||||
<string name="confirm_delete">Er du sikker på, at du vil slette dette indlæg?</string>
|
||||
<string name="confirm_delete_title">Slet indlæg</string>
|
||||
<string name="confirm_delete">Sikker på, at dette indlæg skal slettes?</string>
|
||||
<string name="deleting">Sletter…</string>
|
||||
<string name="notification_channel_audio_player">Afspilning af lyd</string>
|
||||
<string name="notification_channel_audio_player">Lydafspilning</string>
|
||||
<string name="play">Afspil</string>
|
||||
<string name="pause">Sæt på pause</string>
|
||||
<string name="pause">Pausér</string>
|
||||
<string name="log_out">Log ud</string>
|
||||
<string name="add_account">Tilføj konto</string>
|
||||
<string name="search_hint">Søg</string>
|
||||
<string name="hashtags">Hashtags</string>
|
||||
<string name="news">Nyheder</string>
|
||||
<string name="for_you">Til dig</string>
|
||||
<string name="all_notifications">Alt</string>
|
||||
<string name="mentions">Omtaler</string>
|
||||
<plurals name="x_people_talking">
|
||||
<item quantity="one">%d person deltager</item>
|
||||
<item quantity="other">%d personer deltager</item>
|
||||
<item quantity="one">%d person taler</item>
|
||||
<item quantity="other">%d personer taler</item>
|
||||
</plurals>
|
||||
<string name="report_title">Indberet %s</string>
|
||||
<string name="report_choose_reason_subtitle">Vælg en passende grund</string>
|
||||
<string name="report_title">Anmeld %s</string>
|
||||
<string name="report_choose_reason">Hvad er der galt med dette indlæg?</string>
|
||||
<string name="report_choose_reason_account">Hvad er der galt med %s?</string>
|
||||
<string name="report_choose_reason_subtitle">Vælg bedste match</string>
|
||||
<string name="report_reason_personal">Bryder mig ikke om det</string>
|
||||
<string name="report_reason_personal_subtitle">Det er ikke noget, man ønsker at se</string>
|
||||
<string name="report_reason_spam_subtitle">Ondsindede links, falske interaktioner, eller gentagne svar</string>
|
||||
<string name="report_reason_violation">Det overtræder serverreglerne</string>
|
||||
<string name="report_reason_violation_subtitle">Du kender til specifikke regler som det er i strid med</string>
|
||||
<string name="report_reason_other_subtitle">Problemet passer ikke ind i andre kategorier</string>
|
||||
<string name="report_reason_spam">Det er spam</string>
|
||||
<string name="report_reason_spam_subtitle">Ondsindede links, falske interaktioner eller gentagne svar</string>
|
||||
<string name="report_reason_violation">Det overtræder serverregler</string>
|
||||
<string name="report_reason_violation_subtitle">Du er bekendt med, at det overtræder bestemte regler</string>
|
||||
<string name="report_reason_other">Drejer sig om noget andet</string>
|
||||
<string name="report_reason_other_subtitle">Ingen kategori modsvarer problematikken</string>
|
||||
<string name="report_choose_rule">Hvilke regler overtrædes?</string>
|
||||
<string name="report_choose_rule_subtitle">Vælg alle relevante</string>
|
||||
<string name="report_choose_posts">Er der indlæg, som kan bekræfte denne anmeldelse?</string>
|
||||
<string name="report_choose_posts">Er der indlæg, som understøtter denne anmeldelse?</string>
|
||||
<string name="report_choose_posts_subtitle">Vælg alle relevante</string>
|
||||
<string name="report_comment_title">Er der andet, vi bør vide?</string>
|
||||
<string name="report_comment_hint">Yderligere kommentarer</string>
|
||||
<string name="sending_report">Sender rapport…</string>
|
||||
<string name="sending_report">Indsender rapport…</string>
|
||||
<string name="report_sent_title">Tak for anmeldelsen. Vi vil se nærmere på dette.</string>
|
||||
<string name="report_sent_subtitle">Mens vi gennemgår anmeldelsen, kan du tage skridt mod %s:</string>
|
||||
<string name="unfollow_user">Følg ikke længere %s</string>
|
||||
<string name="unfollow">Følg ikke længere</string>
|
||||
<string name="back">Tilbage</string>
|
||||
<string name="search_communities">Server-navn eller URL</string>
|
||||
<string name="mute_user_explain">Du vil ikke se indlæg fra vedkommende, der dog stadig kan se dine indlæg og følge dig, men ikke være bekendt med tavsgørelsen.</string>
|
||||
<string name="block_user_explain">Du vil ikke se indlæg fra vedkommende, der hverken kan se dine indlæg eller følge dig, men vil være bekendt med blokeringen.</string>
|
||||
<string name="report_personal_title">Ønsker du ikke at se dette?</string>
|
||||
<string name="report_personal_subtitle">Her er mulighederne for at styre, hvad du ser på Mastodon:</string>
|
||||
<string name="back">Retur</string>
|
||||
<string name="search_communities">Servernavn eller -URL</string>
|
||||
<string name="instance_rules_title">Serverregler</string>
|
||||
<string name="instance_rules_subtitle">Ved at fortsætte accepterer du at følge følgende regler, der er vedtaget og håndhævet af %ss moderatorer.</string>
|
||||
<string name="instance_rules_subtitle">Ved at fortsætte accepterer du at overholde flg. regler, som angivet og håndhævet af %s moderatorerne.</string>
|
||||
<string name="signup_title">Opret konto</string>
|
||||
<string name="display_name">Navn</string>
|
||||
<string name="username">Brugernavn</string>
|
||||
<string name="email">Email</string>
|
||||
<string name="email">E-mail</string>
|
||||
<string name="password">Adgangskode</string>
|
||||
<string name="confirm_password">Bekræft adgangskode</string>
|
||||
<string name="password_note">Inkluder store bogstaver, specialtegn og tal for at gøre din adgangskode stærkere.</string>
|
||||
<string name="password_note">Benyt majuskler, specialtegn og tal for at øge adgangskodens styrke.</string>
|
||||
<string name="category_academia">Forskning og højere uddannelser</string>
|
||||
<string name="category_activism">Aktivisme</string>
|
||||
<string name="category_all">Alt</string>
|
||||
@@ -153,41 +178,55 @@
|
||||
<string name="category_tech">Teknologi</string>
|
||||
<string name="confirm_email_title">Tjek din indbakke</string>
|
||||
<!-- %s is the email address -->
|
||||
<string name="confirm_email_subtitle">Tryk på det modtage link for at bekræfte %s. Vi venter her så længe.</string>
|
||||
<string name="confirm_email_didnt_get">Modtog intet link?</string>
|
||||
<string name="resend">Send igen</string>
|
||||
<string name="open_email_app">Åben email-app</string>
|
||||
<string name="resent_email">Bekræftelses-email sendt</string>
|
||||
<string name="open_email_app">Åbn e-mail app</string>
|
||||
<string name="resent_email">Bekræftelsesmail sendt</string>
|
||||
<string name="compose_hint">Angiv eller indsæt, hvad du tænker på</string>
|
||||
<string name="content_warning">Indholdsadvarsel</string>
|
||||
<string name="save">Gem</string>
|
||||
<string name="add_alt_text">Tilføj alternativ tekst</string>
|
||||
<string name="visibility_public">Offentlig</string>
|
||||
<string name="visibility_followers_only">Kun følgere</string>
|
||||
<string name="skip">Spring over</string>
|
||||
<string name="notification_type_follow">Nye følgere</string>
|
||||
<string name="visibility_followers_only">Kun Følgere</string>
|
||||
<string name="visibility_private">Kun nævnte personer</string>
|
||||
<string name="recent_searches">Nylige</string>
|
||||
<string name="skip">Overspring</string>
|
||||
<string name="notification_type_follow">Nye Følgere</string>
|
||||
<string name="notification_type_favorite">Favoritmarkeringer</string>
|
||||
<string name="notification_type_reblog">Fremhævninger</string>
|
||||
<string name="notification_type_mention">Omtaler</string>
|
||||
<string name="notification_type_poll">Afstemninger</string>
|
||||
<string name="choose_account">Vælg konto</string>
|
||||
<string name="err_not_logged_in">Log venligst ind på Mastodon først</string>
|
||||
<string name="media_attachment_unsupported_type">Filen %s er af en type der ikke understøttes</string>
|
||||
<string name="media_attachment_too_big">Størrelsen på filen %1$s overskrider grænsen på %2$s MB</string>
|
||||
<string name="err_not_logged_in">Log ind på Mastodon først</string>
|
||||
<plurals name="cant_add_more_than_x_attachments">
|
||||
<item quantity="one">Maks. %d medievedhæftning kan tilføjes</item>
|
||||
<item quantity="other">Maks. %d medievedhæftninger kan tilføjes</item>
|
||||
</plurals>
|
||||
<string name="media_attachment_unsupported_type">Filen %s er af en uunderstøttet type</string>
|
||||
<string name="media_attachment_too_big">Filen %1$s overskrider begrænsningen på %2$s MB</string>
|
||||
<string name="settings_theme">Udseende</string>
|
||||
<string name="theme_auto">Brug enhedens indstillinger for udseende</string>
|
||||
<string name="theme_light">Lys</string>
|
||||
<string name="theme_dark">Mørk</string>
|
||||
<string name="settings_behavior">Opførsel</string>
|
||||
<string name="settings_gif">Spil animerede avatarer og emoji</string>
|
||||
<string name="settings_behavior">Adfærd</string>
|
||||
<string name="settings_gif">Afspil animerede avatarer og emojier</string>
|
||||
<string name="settings_custom_tabs">Benyt in-app browser</string>
|
||||
<string name="settings_notifications">Meddelelser</string>
|
||||
<string name="settings_notifications">Notifikationer</string>
|
||||
<string name="settings_contribute">Bidrag til Mastodon</string>
|
||||
<string name="settings_tos">Vilkår og Betingelser</string>
|
||||
<string name="settings_privacy_policy">Privatlivspolitik</string>
|
||||
<string name="settings_tos">Tjenestevilkår</string>
|
||||
<string name="settings_privacy_policy">Fortrolighedspolitik</string>
|
||||
<string name="settings_clear_cache">Ryd mediecache</string>
|
||||
<string name="settings_app_version">Mastodon til Android v%1$s (%2$d)</string>
|
||||
<string name="media_cache_cleared">Mediecache ryddet</string>
|
||||
<string name="confirm_log_out">Log ud af %s?</string>
|
||||
<string name="sensitive_content_explain">Forfatteren markerede dette medie som sensitivt.</string>
|
||||
<string name="avatar_description">Gå til %ss profil</string>
|
||||
<string name="more_options">Flere muligheder</string>
|
||||
<string name="new_post">Nyt indlæg</string>
|
||||
<string name="button_reply">Svar</string>
|
||||
<string name="button_reblog">Fremhæv</string>
|
||||
<string name="button_favorite">Favorit</string>
|
||||
<string name="button_favorite">Gør til favorit</string>
|
||||
<string name="button_share">Del</string>
|
||||
<string name="media_no_description">Medier uden beskrivelse</string>
|
||||
<string name="add_media">Tilføj medier</string>
|
||||
@@ -198,6 +237,7 @@
|
||||
<string name="media_viewer">Mediefremviser</string>
|
||||
<string name="follow_user">Følg %s</string>
|
||||
<string name="unfollowed_user">Følg ikke længere %s</string>
|
||||
<string name="followed_user">Du følger nu %s</string>
|
||||
<string name="following_user_requested">Anmodede om at følge %s</string>
|
||||
<string name="open_in_browser">Åbn i browser</string>
|
||||
<string name="hide_boosts_from_user">Skjul fremhævninger fra %s</string>
|
||||
@@ -207,7 +247,7 @@
|
||||
<string name="clear">Ryd</string>
|
||||
<string name="profile_header">Overskriftsbillede</string>
|
||||
<string name="profile_picture">Profilbillede</string>
|
||||
<string name="reorder">Omarranger</string>
|
||||
<string name="reorder">Omarrangér</string>
|
||||
<string name="download">Download</string>
|
||||
<string name="permission_required">Tilladelse kræves</string>
|
||||
<string name="storage_permission_to_download">Appen skal have adgang til din lagerplads for at gemme denne fil.</string>
|
||||
@@ -215,7 +255,13 @@
|
||||
<string name="error_saving_file">Fejl under lagring af fil</string>
|
||||
<string name="file_saved">Fil gemt</string>
|
||||
<string name="downloading">Downloader…</string>
|
||||
<string name="no_app_to_handle_action">Ingen app til at håndtere denne handling</string>
|
||||
<string name="local_timeline">Lokalt</string>
|
||||
<string name="trending_posts_info_banner">Her er de indlæg, som vinder indpas på tværs af Mastodon.</string>
|
||||
<string name="trending_links_info_banner">Her er de nyheder, der bliver talt om på Mastodon.</string>
|
||||
<!-- %s is the server domain -->
|
||||
<string name="local_timeline_info_banner">Disse er alle indlæg fra alle brugere på din server (%s).</string>
|
||||
<string name="recommended_accounts_info_banner">Baseret på andre, du følger, vil du måske synes om disse konti.</string>
|
||||
<string name="see_new_posts">Se nye indlæg</string>
|
||||
<string name="load_missing_posts">Indlæs manglende indlæg</string>
|
||||
<string name="follow_back">Følg Tilbage</string>
|
||||
@@ -236,14 +282,14 @@
|
||||
<item quantity="other">%,d favoritmarkeringer</item>
|
||||
</plurals>
|
||||
<plurals name="x_reblogs">
|
||||
<item quantity="one">%,d indlæg</item>
|
||||
<item quantity="other">%,d indlæg</item>
|
||||
<item quantity="one">%,d fremhævning</item>
|
||||
<item quantity="other">%,d fremhævninger</item>
|
||||
</plurals>
|
||||
<string name="timestamp_via_app">%1$s via %2$s</string>
|
||||
<string name="time_now">nu</string>
|
||||
<string name="edit_history">Rediger historik</string>
|
||||
<string name="last_edit_at_x">Senest ændret: %s</string>
|
||||
<string name="time_just_now">lige nu</string>
|
||||
<string name="time_just_now">netop nu</string>
|
||||
<plurals name="x_seconds_ago">
|
||||
<item quantity="one">%d sekund siden</item>
|
||||
<item quantity="other">%d sekunder siden</item>
|
||||
@@ -252,11 +298,11 @@
|
||||
<item quantity="one">%d minut siden</item>
|
||||
<item quantity="other">%d minutter siden</item>
|
||||
</plurals>
|
||||
<string name="edited_timestamp">redigerede %s</string>
|
||||
<string name="edited_timestamp">redigeret %s</string>
|
||||
<string name="edit_original_post">Oprindeligt indlæg</string>
|
||||
<string name="edit_text_edited">Tekst redigeret</string>
|
||||
<string name="edit_spoiler_added">Indholdsadvarsel tilføjet</string>
|
||||
<string name="edit_spoiler_edited">Indholdsadvarsel tilføjet</string>
|
||||
<string name="edit_spoiler_edited">Indholdsadvarsel redigeret</string>
|
||||
<string name="edit_spoiler_removed">Indholdsadvarsel fjernet</string>
|
||||
<string name="edit_poll_added">Afstemning tilføjet</string>
|
||||
<string name="edit_poll_edited">Afstemning redigeret</string>
|
||||
@@ -264,11 +310,11 @@
|
||||
<string name="edit_media_added">Medier tilføjet</string>
|
||||
<string name="edit_media_removed">Medier fjernet</string>
|
||||
<string name="edit_media_reordered">Medie omarrangeret</string>
|
||||
<string name="edit_marked_sensitive">Marker som følsom</string>
|
||||
<string name="edit_marked_not_sensitive">Markeret ikke følsom</string>
|
||||
<string name="edit_marked_sensitive">Markeret sensitivt</string>
|
||||
<string name="edit_marked_not_sensitive">Markeret ikke-sensitivt</string>
|
||||
<string name="edit_multiple_changed">Indlæg redigeret</string>
|
||||
<string name="edit">Rediger</string>
|
||||
<string name="discard_changes">Fortryd ændringer?</string>
|
||||
<string name="edit">Redigér</string>
|
||||
<string name="discard_changes">Kassér ændringer?</string>
|
||||
<string name="upload_failed">Upload mislykkedes</string>
|
||||
<string name="file_size_bytes">%d bytes</string>
|
||||
<string name="file_size_kb">%.2f KB</string>
|
||||
@@ -279,20 +325,21 @@
|
||||
<!-- %s is version like 1.2.3 -->
|
||||
<!-- %s is file size -->
|
||||
<string name="download_update">Download (%s)</string>
|
||||
<string name="install_update">Installer</string>
|
||||
<string name="privacy_policy_title">Dit privatliv</string>
|
||||
<string name="privacy_policy_subtitle">Selvom Mastodon-appen ikke indsamler data, kan den server du tilmelder dig gennem, have en anden politik.\n\nHvis du er uenig i politikken for %s, kan du gå tilbage og vælge en anden server.</string>
|
||||
<string name="install_update">Installér</string>
|
||||
<string name="privacy_policy_title">Din fortrolighed</string>
|
||||
<string name="privacy_policy_subtitle">Selvom Mastodon-appen ikke indsamler data, kan serveren, via hvilken man tilmelder sig, have en anden politik.\n\nEr man uenig i politikken for %s, kan man gå tilbage og vælge en anden server.</string>
|
||||
<string name="i_agree">Jeg accepterer</string>
|
||||
<string name="empty_list">Denne liste er tom</string>
|
||||
<string name="instance_signup_closed">Denne server er ikke åben for nye tilmeldinger.</string>
|
||||
<string name="instance_signup_closed">Denne server accepterer ikke nye tilmeldinger.</string>
|
||||
<string name="text_copied">Kopieret til udklipsholderen</string>
|
||||
<string name="add_bookmark">Bogmærk</string>
|
||||
<string name="remove_bookmark">Fjern bogmærke</string>
|
||||
<string name="bookmarks">Bogmærker</string>
|
||||
<string name="your_favorites">Dine Favoritter</string>
|
||||
<string name="login_title">Velkommen tilbage</string>
|
||||
<string name="login_subtitle">Log ind med serveren hvor du oprettede din bruger.</string>
|
||||
<string name="login_subtitle">Log ind med serveren, på hvilken din konto blev oprettet.</string>
|
||||
<string name="server_url">Server-URL</string>
|
||||
<string name="signup_random_server_explain">En server baseret på dit sprog vælges, hvis du fortsætter uden selv at vælge.</string>
|
||||
<string name="server_filter_any_language">Hvilket som helst sprog</string>
|
||||
<string name="server_filter_instant_signup">Øjeblikkelig tilmelding</string>
|
||||
<string name="server_filter_manual_review">Manuel evaluering</string>
|
||||
@@ -305,6 +352,7 @@
|
||||
<string name="server_filter_region_oceania">Oceania</string>
|
||||
<string name="not_accepting_new_members">Ikke åben for nye medlemmer</string>
|
||||
<string name="category_special_interests">Særlige Interesser</string>
|
||||
<string name="signup_passwords_dont_match">Adgangskoder matcher ikke</string>
|
||||
<string name="pick_server_for_me">Vælg for mig</string>
|
||||
<string name="profile_add_row">Tilføj række</string>
|
||||
<string name="profile_setup">Profilopsætning</string>
|
||||
@@ -313,12 +361,14 @@
|
||||
<string name="popular_on_mastodon">Populært på Mastodon</string>
|
||||
<string name="follow_all">Følg alle</string>
|
||||
<string name="server_rules_disagree">Ikke enig</string>
|
||||
<string name="privacy_policy_explanation">TL;DR: Vi indsamler eller behandler ikke noget.</string>
|
||||
<!-- %s is server domain -->
|
||||
<string name="server_policy_disagree">Uenig med %s</string>
|
||||
<string name="profile_bio">Biografi</string>
|
||||
<!-- Shown in a progress dialog when you tap "follow all" -->
|
||||
<string name="sending_follows">Følger brugere …</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 tillader ikke tilmeldinger fra %2$s. Prøv en anden eller <a>vælg en anden server</a>.</string>
|
||||
<string name="spoiler_show">Vis alligevel</string>
|
||||
<string name="spoiler_hide">Genskjul</string>
|
||||
<string name="poll_multiple_choice">Vælg en eller flere</string>
|
||||
@@ -331,21 +381,128 @@
|
||||
<string name="show">Vis</string>
|
||||
<string name="hide">Skjul</string>
|
||||
<string name="join_default_server">Tilmeld dig %s</string>
|
||||
<string name="pick_server">Vælg en anden server</string>
|
||||
<string name="signup_or_login">eller</string>
|
||||
<string name="learn_more">Få mere at vide</string>
|
||||
<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>
|
||||
<string name="confirm_log_out_all_accounts">Log ud af alle konti?</string>
|
||||
<string name="retry">Forsøg igen</string>
|
||||
<string name="post_failed">Mislykkedes at indsende indlæg</string>
|
||||
<!-- %s is formatted file size ("467 KB image") -->
|
||||
<string name="attachment_description_image">%s billede</string>
|
||||
<string name="attachment_description_video">%s video</string>
|
||||
<string name="attachment_description_audio">%s lyd</string>
|
||||
<string name="attachment_description_unknown">%s fil</string>
|
||||
<string name="attachment_type_image">Billede</string>
|
||||
<string name="attachment_type_video">Video</string>
|
||||
<string name="attachment_type_audio">Lyd</string>
|
||||
<string name="attachment_type_gif">GIF</string>
|
||||
<string name="attachment_type_unknown">Fil</string>
|
||||
<string name="attachment_x_percent_uploaded">%d%% uploadet</string>
|
||||
<string name="add_poll_option">Tilføj afstemningsmulighed</string>
|
||||
<string name="poll_length">Afstemningslængde</string>
|
||||
<string name="poll_style">Stil</string>
|
||||
<string name="compose_poll_single_choice">Vælg én</string>
|
||||
<string name="compose_poll_multiple_choice">Multivalg</string>
|
||||
<string name="delete_poll_option">Slet afstemningsvalg</string>
|
||||
<string name="poll_style_title">Afstemningsstil</string>
|
||||
<string name="alt_text">Alt text</string>
|
||||
<string name="help">Hjælp</string>
|
||||
<string name="what_is_alt_text">Hvad er alt tekst?</string>
|
||||
<string name="alt_text_help">Alt tekst vil sige billedbeskrivelser til personer med synshandikap, forbindelser med lav båndbredde eller dem, som søger ekstra kontekst.\n\nMan kan forbedre tilgængelighed og forståelse for alle ved at skrive klar, kortfattet og objektiv alt-tekst.\n\n<ul><li>Fang vigtige elementer</li>\n<li>Opsummér tekst i billeder</li>\n<li>Brug regulær sætningsstruktur</li>\n<li>Undgå overflødig information</li>\n<li>Fokus på tendenser og vigtige fund i kompleks grafik (såsom diagrammer/kort)</li></ul></string>
|
||||
<string name="edit_post">Redigere opslag</string>
|
||||
<string name="no_verified_link">Intet bekræftet link</string>
|
||||
<string name="compose_autocomplete_emoji_empty">Gennemse emoji</string>
|
||||
<string name="compose_autocomplete_users_empty">Find den, man leder efter</string>
|
||||
<string name="no_search_results">Ingen resultater for disse søgeord</string>
|
||||
<string name="language">Sprog</string>
|
||||
<string name="language_default">Standard</string>
|
||||
<string name="language_system">System</string>
|
||||
<string name="language_detecting">Detektere sprog</string>
|
||||
<string name="language_cant_detect">Kan ikke detektere sprog</string>
|
||||
<string name="language_detected">Detekteret</string>
|
||||
<string name="media_hidden">Medie skjult</string>
|
||||
<string name="post_hidden">Indlæg skjult</string>
|
||||
<string name="report_title_post">Anmeld indlæg</string>
|
||||
<string name="forward_report_explanation">Kontoen er fra en anden server. Send også en anonymiseret kopi af anmeldelsen dertil?</string>
|
||||
<!-- %s is the server domain -->
|
||||
<string name="forward_report_to_server">Videresend til %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">Anmeldt</string>
|
||||
<string name="report_unfollow_explanation">For ikke længere at se vedkommendes indlæg i hjemmefeedet, ophør med at følge.</string>
|
||||
<string name="muted_user">Tavsgjorde %s</string>
|
||||
<!-- %s is the app name (Mastodon, key app_name). I made it a placeholder so everything Just Works™ with forks -->
|
||||
<!-- %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 -->
|
||||
<!-- %s is the timestamp ("tomorrow at 12:34") -->
|
||||
<!-- %s is the timestamp ("tomorrow at 12:34") -->
|
||||
<string name="count_three">Tre</string>
|
||||
<string name="count_four">Fire</string>
|
||||
<string name="alt_text_reminder_post_anyway">Indlæg</string>
|
||||
<!-- %s is the username -->
|
||||
<string name="unfollow_confirmation">Følg ikke længere %s?</string>
|
||||
<string name="filter_active">Aktiv</string>
|
||||
<string name="filter_inactive">Inaktiv</string>
|
||||
<string name="settings_add_filter">Tilføj filter</string>
|
||||
<string name="settings_edit_filter">Redigér filter</string>
|
||||
<string name="settings_filter_duration">Varighed</string>
|
||||
<string name="settings_filter_muted_words">Tavsgjorte (skjulte) ord</string>
|
||||
<string name="settings_filter_context">Tavsgør fra</string>
|
||||
<string name="settings_filter_show_cw">Vis med indholdsadvarsel</string>
|
||||
<string name="settings_filter_show_cw_explanation">Viser stadig indlæg matchende dette filter, men bag en indholdsadvarsel</string>
|
||||
<string name="settings_delete_filter">Slet filter</string>
|
||||
<string name="filter_duration_forever">For evigt</string>
|
||||
<!-- %s is the timestamp ("tomorrow at 12:34") -->
|
||||
<string name="settings_filter_ends">Slutter %s</string>
|
||||
<plurals name="settings_x_muted_words">
|
||||
<item quantity="one">%d tavsgjort (skjult) ord/sætning</item>
|
||||
<item quantity="other">%d tavsgjorte (skjulte) ord/sætninger</item>
|
||||
</plurals>
|
||||
<string name="selection_2_options">%1$s og %2$s</string>
|
||||
<string name="selection_3_options">%1$s, %2$s og %3$s</string>
|
||||
<string name="selection_4_or_more">%1$s, %2$s og %3$d flere</string>
|
||||
<string name="filter_context_home_lists">Hjem og lister</string>
|
||||
<string name="filter_context_notifications">Notifikationer</string>
|
||||
<string name="filter_context_public_timelines">Offentlige tidslinjer</string>
|
||||
<string name="filter_context_threads_replies">Tråde og svar</string>
|
||||
<string name="filter_context_profiles">Profiler</string>
|
||||
<string name="settings_filter_title">Titel</string>
|
||||
<string name="settings_delete_filter_title">Slet filter “%s”?</string>
|
||||
<string name="settings_delete_filter_confirmation">Dette filter slettes fra din konto på alle enheder.</string>
|
||||
<string name="add_muted_word">Tilføj tavsgjort (skjult) ord</string>
|
||||
<string name="edit_muted_word">Redigér tavsgjort (skjult) ord</string>
|
||||
<string name="add">Tilføj</string>
|
||||
<string name="filter_word_or_phrase">Ord/sætning</string>
|
||||
<string name="filter_add_word_help">Ord er versalfølsomme og matcher kun fulde ord.\n\nFiltreres nøgleordet “Apple,” vil det skjule indlæg indeholdende “apple” eller “aPpLe”, men ikke “pineapple”.</string>
|
||||
<string name="settings_delete_filter_word">Slet ordet “%s”?</string>
|
||||
<string name="enter_selection_mode">Vælg</string>
|
||||
<string name="select_all">Vælg alle</string>
|
||||
<string name="settings_filter_duration_title">Filtervarighed</string>
|
||||
<string name="filter_duration_custom">Tilpasset</string>
|
||||
<plurals name="settings_delete_x_filter_words">
|
||||
<item quantity="one">Slet %d ord?</item>
|
||||
<item quantity="other">Slet %d ord?</item>
|
||||
</plurals>
|
||||
<plurals name="x_items_selected">
|
||||
<item quantity="one">%d valgt</item>
|
||||
<item quantity="other">%d valgt</item>
|
||||
</plurals>
|
||||
<string name="required_form_field_blank">Obligatorisk felt</string>
|
||||
<string name="filter_word_already_in_list">Allerede på listen</string>
|
||||
<string name="app_update_ready">App-opdatering klar</string>
|
||||
<string name="app_update_version">Version %s</string>
|
||||
<string name="downloading_update">Downloader (%d%%)</string>
|
||||
<!-- Shown like a content warning, %s is the name of the filter -->
|
||||
<string name="post_matches_filter_x">Matcher filter “%s”</string>
|
||||
<string name="search_mastodon">Søg i Mastodon</string>
|
||||
<string name="clear_all">Ryd alle</string>
|
||||
<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>
|
||||
|
||||
@@ -4,12 +4,18 @@
|
||||
<string name="next">Weiter</string>
|
||||
<string name="loading_instance">Server-Informationen werden abgerufen …</string>
|
||||
<string name="error">Fehler</string>
|
||||
<string name="not_a_mastodon_instance">%s scheint kein Mastodon-Server zu sein.</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="preparing_auth">Authentifizierung wird vorbereitet …</string>
|
||||
<string name="finishing_auth">Authentifizierung wird abgeschlossen …</string>
|
||||
<string name="user_boosted">%s hat geteilt</string>
|
||||
<string name="finishing_auth">Authentisierung wird abgeschlossen …</string>
|
||||
<string name="user_boosted">%s teilte</string>
|
||||
<string name="in_reply_to">Als Antwort auf %s</string>
|
||||
<string name="notifications">Benachrichtigungen</string>
|
||||
<string name="user_followed_you">%s folgt dir jetzt</string>
|
||||
<string name="user_sent_follow_request">%s hat dir eine Folgeanfrage gesendet</string>
|
||||
<string name="user_favorited">%s favorisierte deinen Beitrag</string>
|
||||
<string name="notification_boosted">%s teilte deinen Beitrag</string>
|
||||
<string name="poll_ended">Sieh dir die Ergebnisse einer Umfrage an, in der du abgestimmt hast</string>
|
||||
<string name="share_toot_title">Teilen</string>
|
||||
<string name="settings">Einstellungen</string>
|
||||
<string name="publish">Veröffentlichen</string>
|
||||
@@ -31,13 +37,14 @@
|
||||
<string name="button_follow">Folgen</string>
|
||||
<string name="button_following">Folge ich</string>
|
||||
<string name="edit_profile">Profil bearbeiten</string>
|
||||
<string name="share_user">Profil teilen</string>
|
||||
<string name="mute_user">%s stummschalten</string>
|
||||
<string name="unmute_user">%s nicht mehr stummschalten</string>
|
||||
<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>
|
||||
@@ -78,6 +85,10 @@
|
||||
<item quantity="one">noch %d Tag</item>
|
||||
<item quantity="other">noch %d Tage</item>
|
||||
</plurals>
|
||||
<plurals name="x_votes">
|
||||
<item quantity="one">%,d Stimme</item>
|
||||
<item quantity="other">%,d Stimmen</item>
|
||||
</plurals>
|
||||
<string name="poll_closed">Beendet</string>
|
||||
<string name="confirm_mute_title">Konto stummschalten</string>
|
||||
<string name="confirm_mute">Bestätigen, um %s stummzuschalten</string>
|
||||
@@ -87,36 +98,44 @@
|
||||
<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>
|
||||
<string name="confirm_delete_title">Beitrag löschen</string>
|
||||
<string name="confirm_delete">Bist du dir sicher, dass du diesen Beitrag löschen möchtest?</string>
|
||||
<string name="deleting">Wird gelöscht…</string>
|
||||
<string name="notification_channel_audio_player">Audiowiedergabe</string>
|
||||
<string name="play">Abspielen</string>
|
||||
<string name="pause">Pausieren</string>
|
||||
<string name="log_out">Abmelden</string>
|
||||
<string name="add_account">Konto hinzufügen</string>
|
||||
<string name="search_hint">Suchen</string>
|
||||
<string name="hashtags">Hashtags</string>
|
||||
<string name="news">Nachrichten</string>
|
||||
<string name="for_you">Vorschläge</string>
|
||||
<string name="all_notifications">Alles</string>
|
||||
<string name="mentions">Erwähnungen</string>
|
||||
<plurals name="x_people_talking">
|
||||
<item quantity="one">%d Person redet darüber</item>
|
||||
<item quantity="other">%d Personen reden darüber</item>
|
||||
</plurals>
|
||||
<string name="report_title">%s melden</string>
|
||||
<string name="report_choose_reason">Was stimmt mit diesem Beitrag nicht?</string>
|
||||
<string name="report_choose_reason_account">Was stimmt mit %s nicht?</string>
|
||||
<string name="report_choose_reason_subtitle">Bitte das Bestmögliche auswählen</string>
|
||||
<string name="report_reason_personal">Mir gefällt das nicht</string>
|
||||
<string name="report_reason_personal_subtitle">Das ist nichts, was du sehen möchtest</string>
|
||||
<string name="report_reason_spam">Das ist Spam</string>
|
||||
<string name="report_reason_spam_subtitle">Bösartige Links, vorgetäuschtes Verhalten oder wiederholtes Antworten</string>
|
||||
<string name="report_reason_violation">Es verstößt gegen Serverregeln</string>
|
||||
<string name="report_reason_violation_subtitle">Du bist dir bewusst, dass dies gegen die Serverregeln verstößt</string>
|
||||
<string name="report_reason_other">Das ist was anderes</string>
|
||||
<string name="report_reason_other_subtitle">Der Vorfall passt zu keiner dieser Kategorien</string>
|
||||
<string name="report_choose_rule">Gegen welche Regeln wird verstoßen?</string>
|
||||
<string name="report_choose_rule_subtitle">Alles Zutreffende auswählen</string>
|
||||
@@ -124,9 +143,15 @@
|
||||
<string name="report_choose_posts_subtitle">Alles Zutreffende auswählen</string>
|
||||
<string name="report_comment_title">Gibt es weitere Anmerkungen, von denen wir wissen sollten?</string>
|
||||
<string name="report_comment_hint">Ergänzende Hinweise</string>
|
||||
<string name="sending_report">Meldung wird verschickt …</string>
|
||||
<string name="sending_report">Meldung wird gesendet …</string>
|
||||
<string name="report_sent_title">Danke für deine Meldung, wir werden uns damit beschäftigen.</string>
|
||||
<string name="report_sent_subtitle">Während wir den Vorfall überprüfen, kannst du gegen %s weitere Maßnahmen ergreifen:</string>
|
||||
<string name="unfollow_user">%s entfolgen</string>
|
||||
<string name="unfollow">Entfolgen</string>
|
||||
<string name="mute_user_explain">Du wirst die Beiträge vom Konto nicht mehr sehen. Das Konto kann dir immer noch folgen, und die Person hinter dem Konto wird deine Beiträge sehen können und nicht wissen, dass du sie stummgeschaltet hast.</string>
|
||||
<string name="block_user_explain">Dir wird es nicht länger möglich sein, die Beiträge dieses Konto zu sehen. Das blockierte Profil wird nicht mehr in der Lage sein, deine Beiträge zu sehen oder dir zu folgen. Die Person hinter dem Konto wird mitbekommen, dass du ihr Konto blockiert hast.</string>
|
||||
<string name="report_personal_title">Du willst das nicht mehr sehen?</string>
|
||||
<string name="report_personal_subtitle">Das sind deine Möglichkeiten zu bestimmen, was du auf Mastodon sehen möchtest:</string>
|
||||
<string name="back">Zurück</string>
|
||||
<string name="search_communities">Servername oder -adresse</string>
|
||||
<string name="instance_rules_title">Server-Regeln</string>
|
||||
@@ -153,14 +178,19 @@
|
||||
<string name="category_tech">Technik</string>
|
||||
<string name="confirm_email_title">Überprüfe deinen Posteingang</string>
|
||||
<!-- %s is the email address -->
|
||||
<string name="confirm_email_subtitle">Bitte klicke auf den Link, den wir an %s geschickt haben, um dich zu verifizieren. Wir warten bis dahin einfach hier.</string>
|
||||
<string name="confirm_email_didnt_get">Kein Link angekommen?</string>
|
||||
<string name="resend">Erneut abschicken</string>
|
||||
<string name="open_email_app">E-Mail-App öffnen</string>
|
||||
<string name="resent_email">Bestätigung per E-Mail zugeschickt</string>
|
||||
<string name="compose_hint">Tippe oder füge ein, was dir am Herzen liegt</string>
|
||||
<string name="content_warning">Inhaltswarnung</string>
|
||||
<string name="save">Speichern</string>
|
||||
<string name="add_alt_text">Bildbeschreibung hinzufügen</string>
|
||||
<string name="visibility_public">Öffentlich</string>
|
||||
<string name="visibility_followers_only">Nur Follower</string>
|
||||
<string name="visibility_private">Nur erwähnte Profile</string>
|
||||
<string name="recent_searches">Verlauf</string>
|
||||
<string name="skip">Überspringen</string>
|
||||
<string name="notification_type_follow">Neue Follower</string>
|
||||
<string name="notification_type_favorite">Favoriten</string>
|
||||
@@ -169,8 +199,14 @@
|
||||
<string name="notification_type_poll">Umfragen</string>
|
||||
<string name="choose_account">Konto auswählen</string>
|
||||
<string name="err_not_logged_in">Bitte zuerst in Mastodon anmelden</string>
|
||||
<plurals name="cant_add_more_than_x_attachments">
|
||||
<item quantity="one">Du kannst nicht mehr als %d Mediendatei anhängen</item>
|
||||
<item quantity="other">Du kannst nicht mehr als %d Mediendateien anhängen</item>
|
||||
</plurals>
|
||||
<string name="media_attachment_unsupported_type">Dateityp von %s wird nicht unterstützt</string>
|
||||
<string name="media_attachment_too_big">Datei %1$s überschreitet die maximale Größe von %2$s MB</string>
|
||||
<string name="settings_theme">Erscheinungsbild</string>
|
||||
<string name="theme_auto">Einstellungen des Geräts übernehmen</string>
|
||||
<string name="theme_light">Hell</string>
|
||||
<string name="theme_dark">Dunkel</string>
|
||||
<string name="settings_behavior">Verhalten</string>
|
||||
@@ -183,6 +219,9 @@
|
||||
<string name="settings_clear_cache">Medien-Cache leeren</string>
|
||||
<string name="settings_app_version">Mastodon für Android v%1$s (%2$d)</string>
|
||||
<string name="media_cache_cleared">Medien-Cache geleert</string>
|
||||
<string name="confirm_log_out">Von %s abmelden?</string>
|
||||
<string name="sensitive_content_explain">Autor*in hat den Inhalt mit einer Inhaltswarnung versehen.</string>
|
||||
<string name="avatar_description">Profil von %s aufrufen</string>
|
||||
<string name="more_options">Weitere Einstellungen</string>
|
||||
<string name="new_post">Neuer Beitrag</string>
|
||||
<string name="button_reply">Antworten</string>
|
||||
@@ -198,9 +237,10 @@
|
||||
<string name="media_viewer">Medienanzeige</string>
|
||||
<string name="follow_user">%s folgen</string>
|
||||
<string name="unfollowed_user">%s entfolgt</string>
|
||||
<string name="followed_user">Du folgst nun %s</string>
|
||||
<string name="following_user_requested">Deine Follower-Anfrage an %s wurde gesendet</string>
|
||||
<string name="open_in_browser">Im Browser öffnen</string>
|
||||
<string name="hide_boosts_from_user">Geteilte Beiträge von %s verstecken</string>
|
||||
<string name="hide_boosts_from_user">Geteilte Beiträge von %s ausblenden</string>
|
||||
<string name="show_boosts_from_user">Geteilte Beiträge von %s anzeigen</string>
|
||||
<string name="signup_reason">Warum möchtest du beitreten?</string>
|
||||
<string name="signup_reason_note">Das erleichtert uns die Prüfung deiner Anmeldung.</string>
|
||||
@@ -210,12 +250,18 @@
|
||||
<string name="reorder">Neu sortieren</string>
|
||||
<string name="download">Herunterladen</string>
|
||||
<string name="permission_required">Berechtigung erforderlich</string>
|
||||
<string name="storage_permission_to_download">Die App benötigt Zugriff auf den Speicher deines Gerätes, um diese Datei zu speichern.</string>
|
||||
<string name="storage_permission_to_download">Die App benötigt Zugriff auf den Speicher deines Geräts, um diese Datei zu speichern.</string>
|
||||
<string name="open_settings">Einstellungen öffnen</string>
|
||||
<string name="error_saving_file">Fehler beim Speichern der Datei</string>
|
||||
<string name="file_saved">Datei gespeichert</string>
|
||||
<string name="downloading">wird heruntergeladen …</string>
|
||||
<string name="no_app_to_handle_action">Es gibt keine App, um diese Aktion auszuführen</string>
|
||||
<string name="local_timeline">Lokal</string>
|
||||
<string name="trending_posts_info_banner">Dies sind Beiträge, die auf deinem Mastodon-Server gerade angesagt sind.</string>
|
||||
<string name="trending_links_info_banner">Dies sind die Nachrichten, über die auf Mastodon gesprochen wird.</string>
|
||||
<!-- %s is the server domain -->
|
||||
<string name="local_timeline_info_banner">Dies sind alle Beiträge von allen Benutzern auf deinem Server (%s).</string>
|
||||
<string name="recommended_accounts_info_banner">Dir könnten diese Konten gefallen, basierend auf Leuten, denen du folgst.</string>
|
||||
<string name="see_new_posts">Neue Beiträge anzeigen</string>
|
||||
<string name="load_missing_posts">Weitere Beiträge laden</string>
|
||||
<string name="follow_back">Zurückfolgen</string>
|
||||
@@ -232,8 +278,8 @@
|
||||
<item quantity="other">%,d folge ich</item>
|
||||
</plurals>
|
||||
<plurals name="x_favorites">
|
||||
<item quantity="one">%,d × favorisiert</item>
|
||||
<item quantity="other">%,d × favorisiert</item>
|
||||
<item quantity="one">einmal favorisiert</item>
|
||||
<item quantity="other">%,d-mal favorisiert</item>
|
||||
</plurals>
|
||||
<plurals name="x_reblogs">
|
||||
<item quantity="one">%,d geteilter Beitrag</item>
|
||||
@@ -286,13 +332,14 @@
|
||||
<string name="empty_list">Diese Liste ist leer</string>
|
||||
<string name="instance_signup_closed">Dieser Server akzeptiert keine neuen Registrierungen.</string>
|
||||
<string name="text_copied">In die Zwischenablage kopiert</string>
|
||||
<string name="add_bookmark">Lesezeichen hinzufügen</string>
|
||||
<string name="add_bookmark">Lesezeichen setzen</string>
|
||||
<string name="remove_bookmark">Lesezeichen entfernen</string>
|
||||
<string name="bookmarks">Lesezeichen</string>
|
||||
<string name="your_favorites">Deine Favoriten</string>
|
||||
<string name="login_title">Willkommen zurück</string>
|
||||
<string name="login_subtitle">Melde dich mit dem Server an, auf dem du dein Konto erstellt hast.</string>
|
||||
<string name="server_url">Serveradresse</string>
|
||||
<string name="signup_random_server_explain">Wenn du fortfährst, ohne eine Auswahl zu treffen, wird ein Server auf der Grundlage deiner Sprache ausgewählt.</string>
|
||||
<string name="server_filter_any_language">Alle Sprachen</string>
|
||||
<string name="server_filter_instant_signup">Schnellregistrierung</string>
|
||||
<string name="server_filter_manual_review">Manuelle Überprüfung</string>
|
||||
@@ -305,6 +352,7 @@
|
||||
<string name="server_filter_region_oceania">Ozeanien</string>
|
||||
<string name="not_accepting_new_members">Keine Aufnahme neuer Mitglieder</string>
|
||||
<string name="category_special_interests">Besondere Interessen</string>
|
||||
<string name="signup_passwords_dont_match">Passwörter stimmen nicht überein</string>
|
||||
<string name="pick_server_for_me">Wähle für mich aus</string>
|
||||
<string name="profile_add_row">Zeile hinzufügen</string>
|
||||
<string name="profile_setup">Profil einrichten</string>
|
||||
@@ -313,12 +361,14 @@
|
||||
<string name="popular_on_mastodon">Beliebt auf Mastodon</string>
|
||||
<string name="follow_all">Allen folgen</string>
|
||||
<string name="server_rules_disagree">Ablehnen</string>
|
||||
<string name="privacy_policy_explanation">TL;DR: Wir sammeln oder verarbeiten nichts.</string>
|
||||
<!-- %s is server domain -->
|
||||
<string name="server_policy_disagree">%s nicht zustimmen</string>
|
||||
<string name="profile_bio">Über mich</string>
|
||||
<!-- Shown in a progress dialog when you tap "follow all" -->
|
||||
<string name="sending_follows">Benutzer*innen wird gefolgt …</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 lässt keine Anmeldungen von %2$s zu. Versuche eine andere E-Mailadresse oder <a>wähle einen anderen Server</a>.</string>
|
||||
<string name="spoiler_show">Trotzdem anzeigen</string>
|
||||
<string name="spoiler_hide">Wieder verstecken</string>
|
||||
<string name="poll_multiple_choice">Wähle ein/e oder mehrere aus</string>
|
||||
@@ -337,16 +387,200 @@
|
||||
<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>
|
||||
<string name="confirm_log_out_all_accounts">Von allen Konten abmelden?</string>
|
||||
<string name="retry">Erneut versuchen</string>
|
||||
<string name="post_failed">Senden des Beitrags fehlgeschlagen</string>
|
||||
<!-- %s is formatted file size ("467 KB image") -->
|
||||
<string name="attachment_description_image">%s Bild</string>
|
||||
<string name="attachment_description_video">%s Video</string>
|
||||
<string name="attachment_description_audio">%s Audiodatei</string>
|
||||
<string name="attachment_description_unknown">%s Datei</string>
|
||||
<string name="attachment_type_image">Bild</string>
|
||||
<string name="attachment_type_video">Video</string>
|
||||
<string name="attachment_type_audio">Audiodatei</string>
|
||||
<string name="attachment_type_gif">GIF</string>
|
||||
<string name="attachment_type_unknown">Datei</string>
|
||||
<string name="attachment_x_percent_uploaded">%d%% hochgeladen</string>
|
||||
<string name="add_poll_option">Umfrageoption hinzufügen</string>
|
||||
<string name="poll_length">Umfragelänge</string>
|
||||
<string name="poll_style">Stil</string>
|
||||
<string name="compose_poll_single_choice">Wähle eins</string>
|
||||
<string name="compose_poll_multiple_choice">Multiple Choice</string>
|
||||
<string name="delete_poll_option">Umfrageoption löschen</string>
|
||||
<string name="poll_style_title">Umfragestil</string>
|
||||
<string name="alt_text">Alt-Text</string>
|
||||
<string name="help">Hilfe</string>
|
||||
<string name="what_is_alt_text">Was ist Alt-Text?</string>
|
||||
<string name="alt_text_help">Alt Text bietet Bildbeschreibungen für Personen mit Sehbehinderungen, Verbindungen mit niedriger Bandbreite oder solche, die einen zusätzlichen Kontext suchen.\n\nDu kannst die Zugänglichkeit und das Verständnis für alle verbessern, indem du klaren, präzisen und objektiven Alt-Text schreibst.\n\n<ul><li>Wichtige Elemente erfassen</li>\n<li>Zusammenfassung des Textes in Bildern</li>\n<li>Reguläre Satzstrukturen nutzen</li>\n<li>Vermeide redundante Informationen</li>\n<li>Fokussiere dich auf Trends und Schlüsselfeststellungen in komplexen Darstellungen (wie Diagramme oder Karten)</li></ul></string>
|
||||
<string name="edit_post">Beitrag bearbeiten</string>
|
||||
<string name="no_verified_link">Kein bestätigter Link</string>
|
||||
<string name="compose_autocomplete_emoji_empty">Emoji durchsuchen</string>
|
||||
<string name="compose_autocomplete_users_empty">Finde das, wonach du suchst</string>
|
||||
<string name="no_search_results">Nichts zu diesen Suchbegriffen gefunden</string>
|
||||
<string name="language">Sprache</string>
|
||||
<string name="language_default">Standard</string>
|
||||
<string name="language_system">System</string>
|
||||
<string name="language_detecting">Sprache erkennen</string>
|
||||
<string name="language_cant_detect">Sprache nicht erkannt</string>
|
||||
<string name="language_detected">Erkannt</string>
|
||||
<string name="media_hidden">Medien versteckt</string>
|
||||
<string name="post_hidden">Beitrag ausgeblendet</string>
|
||||
<string name="report_title_post">Beitrag melden</string>
|
||||
<string name="forward_report_explanation">Dieses Konto gehört zu einem anderen Server. Soll eine anonymisierte Kopie der Meldung auch dorthin geschickt werden?</string>
|
||||
<!-- %s is the server domain -->
|
||||
<string name="forward_report_to_server">Weiterleiten an %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">Gemeldet</string>
|
||||
<string name="report_unfollow_explanation">Damit du die Beiträge nicht mehr auf deiner Startseite findest, solltest du dieser Person entfolgen.</string>
|
||||
<string name="muted_user">%s stummgeschaltet</string>
|
||||
<string name="report_sent_already_blocked">Du hast diesen Benutzer bereits blockiert, sodass du nichts anderes tun musst, während wir deine Meldung überprüfen.</string>
|
||||
<string name="report_personal_already_blocked">Du hast diesen Benutzer bereits geblockt, also musst du nichts anderes tun.\n\nDanke, dass du Mastodon geholfen hast, ein noch sicherer Ort für alle zu werden!</string>
|
||||
<string name="blocked_user">%s blockiert</string>
|
||||
<string name="mark_all_notifications_read">Alle als gelesen markieren</string>
|
||||
<string name="settings_display">Darstellung</string>
|
||||
<string name="settings_filters">Filter</string>
|
||||
<string name="settings_server_explanation">Übersicht, Regeln, Moderatoren</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">Über %s</string>
|
||||
<string name="default_post_language">Standard-Beitragssprache</string>
|
||||
<string name="settings_alt_text_reminders">Erinnerung für Alt-Text anzeigen</string>
|
||||
<string name="settings_confirm_unfollow">Fragen bevor du jemanden entfolgst</string>
|
||||
<string name="settings_confirm_boost">Fragen bevor ein Beitrag geteilt wird</string>
|
||||
<string name="settings_confirm_delete_post">Fragen bevor ein Beitrag gelöscht wird</string>
|
||||
<string name="pause_all_notifications">Alle pausieren</string>
|
||||
<string name="pause_notifications_off">Aus</string>
|
||||
<string name="notifications_policy_anyone">Jeder</string>
|
||||
<string name="notifications_policy_followed">Leute, die dir folgen</string>
|
||||
<string name="notifications_policy_follower">Leute, denen ich folge</string>
|
||||
<string name="notifications_policy_no_one">Niemandem</string>
|
||||
<string name="settings_notifications_policy">Erhalte Benachrichtigungen von</string>
|
||||
<string name="notification_type_mentions_and_replies">Erwähnungen und Antworten</string>
|
||||
<string name="pause_all_notifications_title">Alle Benachrichtigungen pausieren</string>
|
||||
<plurals name="x_weeks">
|
||||
<item quantity="one">%d Woche</item>
|
||||
<item quantity="other">%d Wochen</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 am %2$s</string>
|
||||
<string name="today">heute</string>
|
||||
<string name="yesterday">gestern</string>
|
||||
<string name="tomorrow">morgen</string>
|
||||
<!-- %s is the timestamp ("tomorrow at 12:34") -->
|
||||
<string name="pause_notifications_ends">Endet %s</string>
|
||||
<!-- %s is the timestamp ("tomorrow at 12:34") -->
|
||||
<string name="pause_notifications_banner">Benachrichtigungen werden %s fortgesetzt.</string>
|
||||
<string name="resume_notifications_now">Jetzt fortsetzen</string>
|
||||
<string name="open_system_notification_settings">Gehe zu Benachrichtigungseinstellungen</string>
|
||||
<string name="about_server">Über</string>
|
||||
<string name="server_rules">Regeln</string>
|
||||
<string name="server_administrator">Administrator*in</string>
|
||||
<string name="send_email_to_server_admin">Administrator anschreiben</string>
|
||||
<string name="notifications_disabled_in_system">Schalte Benachrichtigungen in den Geräteeinstellungen ein, um Aktualisierungen von überall zu sehen.</string>
|
||||
<string name="settings_even_more">Viel mehr Einstellungen</string>
|
||||
<string name="settings_show_cws">Inhaltswarnung anzeigen</string>
|
||||
<string name="settings_hide_sensitive_media">Medien mit Inhaltswarnung ausblenden</string>
|
||||
<string name="settings_show_interaction_counts">Anzahl der Post-Interaktionen</string>
|
||||
<string name="settings_show_emoji_in_names">Benutzerdefinierte Emoji in Anzeigenamen</string>
|
||||
<plurals name="in_x_seconds">
|
||||
<item quantity="one">in %d Sekunde</item>
|
||||
<item quantity="other">in %d Sekunden</item>
|
||||
</plurals>
|
||||
<plurals name="in_x_minutes">
|
||||
<item quantity="one">in %d Minute</item>
|
||||
<item quantity="other">in %d Minuten</item>
|
||||
</plurals>
|
||||
<plurals name="in_x_hours">
|
||||
<item quantity="one">in %d Stunde</item>
|
||||
<item quantity="other">in %d Stunden</item>
|
||||
</plurals>
|
||||
<plurals name="x_hours_ago">
|
||||
<item quantity="one">vor %d Stunde</item>
|
||||
<item quantity="other">vor %d Stunden</item>
|
||||
</plurals>
|
||||
<string name="alt_text_reminder_title">Vor fehlendem Alt-Text warnen</string>
|
||||
<plurals name="alt_text_reminder_x_images">
|
||||
<item quantity="one">%s deiner Bilder fehlt der Alt-Text. Wirklich senden?</item>
|
||||
<item quantity="other">%s deiner Bilder fehlt der Alt-Text. Wirklich senden?</item>
|
||||
</plurals>
|
||||
<plurals name="alt_text_reminder_x_attachments">
|
||||
<item quantity="one">%s deiner Medienanhänge fehlt der Alt-Text. Wirklich senden?</item>
|
||||
<item quantity="other">%s deiner Medienanhänge fehlt der Alt-Text. Wirklich senden?</item>
|
||||
</plurals>
|
||||
<string name="count_one">Eins</string>
|
||||
<string name="count_two">Zwei</string>
|
||||
<string name="count_three">Drei</string>
|
||||
<string name="count_four">Vier</string>
|
||||
<string name="alt_text_reminder_post_anyway">Senden</string>
|
||||
<!-- %s is the username -->
|
||||
<string name="unfollow_confirmation">%s entfolgen?</string>
|
||||
<string name="filter_active">Aktiv</string>
|
||||
<string name="filter_inactive">Inaktiv</string>
|
||||
<string name="settings_add_filter">Filter hinzufügen</string>
|
||||
<string name="settings_edit_filter">Filter bearbeiten</string>
|
||||
<string name="settings_filter_duration">Dauer</string>
|
||||
<string name="settings_filter_muted_words">Stummgeschaltete Wörter</string>
|
||||
<string name="settings_filter_context">Stumm von</string>
|
||||
<string name="settings_filter_show_cw">Inhaltswarnung anzeigen</string>
|
||||
<string name="settings_filter_show_cw_explanation">Beiträge anzeigen, die zu diesem Filter passen, aber hinter einer Inhaltswarnung</string>
|
||||
<string name="settings_delete_filter">Filter löschen</string>
|
||||
<string name="filter_duration_forever">Für immer</string>
|
||||
<!-- %s is the timestamp ("tomorrow at 12:34") -->
|
||||
<string name="settings_filter_ends">Endet %s</string>
|
||||
<plurals name="settings_x_muted_words">
|
||||
<item quantity="one">%d stummgeschaltetes Wort oder Phrase</item>
|
||||
<item quantity="other">%d stummgeschaltete Wörter oder Phrasen</item>
|
||||
</plurals>
|
||||
<string name="selection_2_options">%1$s und %2$s</string>
|
||||
<string name="selection_3_options">%1$s, %2$s, und %3$s</string>
|
||||
<string name="selection_4_or_more">%1$s, %2$s und %3$d mehr</string>
|
||||
<string name="filter_context_home_lists">Startseite & Listen</string>
|
||||
<string name="filter_context_notifications">Mitteilungen</string>
|
||||
<string name="filter_context_public_timelines">Öffentliche Timelines</string>
|
||||
<string name="filter_context_threads_replies">Threads & Beiträge</string>
|
||||
<string name="filter_context_profiles">Profile</string>
|
||||
<string name="settings_filter_title">Titel</string>
|
||||
<string name="settings_delete_filter_title">Filter \"%s\" löschen?</string>
|
||||
<string name="settings_delete_filter_confirmation">Dieser Filter wird von deinem Konto auf all deinen Geräten gelöscht.</string>
|
||||
<string name="add_muted_word">Stummgeschaltetes Wort hinzufügen</string>
|
||||
<string name="edit_muted_word">Stummgeschaltetes Wort bearbeiten</string>
|
||||
<string name="add">Hinzufügen</string>
|
||||
<string name="filter_word_or_phrase">Wort oder Phrase</string>
|
||||
<string name="filter_add_word_help">Bei diesen Wörtern ist die Groß- und Kleinschreibung egal und es werden nur vollständige Wörter überprüft.\n\nWenn du das Stichwort „Apfel“ filterst, wird es Beiträge verstecken, die „apfel“ oder „aPfel“ enthalten, aber nicht „Anapapfel.“</string>
|
||||
<string name="settings_delete_filter_word">Wort \"%s\" löschen?</string>
|
||||
<string name="enter_selection_mode">Auswählen</string>
|
||||
<string name="select_all">Alles auswählen</string>
|
||||
<string name="settings_filter_duration_title">Filterdauer</string>
|
||||
<string name="filter_duration_custom">Benutzerdefiniert</string>
|
||||
<plurals name="settings_delete_x_filter_words">
|
||||
<item quantity="one">Wort %d löschen?</item>
|
||||
<item quantity="other">Wörter %d löschen?</item>
|
||||
</plurals>
|
||||
<plurals name="x_items_selected">
|
||||
<item quantity="one">%d ausgewählt</item>
|
||||
<item quantity="other">%d ausgewählt</item>
|
||||
</plurals>
|
||||
<string name="required_form_field_blank">Kann nicht leer sein</string>
|
||||
<string name="filter_word_already_in_list">Bereits in der Liste</string>
|
||||
<string name="app_update_ready">App-Update bereit</string>
|
||||
<string name="app_update_version">Version %s</string>
|
||||
<string name="downloading_update">Wird heruntergeladen (%d%%)</string>
|
||||
<!-- Shown like a content warning, %s is the name of the filter -->
|
||||
<string name="post_matches_filter_x">Hinter Filter für \"%s\"</string>
|
||||
<string name="search_mastodon">Mastodon durchsuchen</string>
|
||||
<string name="clear_all">Alles löschen</string>
|
||||
<string name="search_open_url">URL in Mastodon öffnen</string>
|
||||
<string name="posts_matching_hashtag">Beiträge mit \"%s\"</string>
|
||||
<string name="search_go_to_account">Gehe zu %s</string>
|
||||
<string name="posts_matching_string">Beiträge mit \"%s\"</string>
|
||||
<string name="accounts_matching_string">Personen mit \"%s\"</string>
|
||||
<!-- Shown in the post header. Please keep it short -->
|
||||
<string name="time_seconds_ago_short">vor %d Sekunden</string>
|
||||
<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>
|
||||
|
||||
@@ -4,12 +4,18 @@
|
||||
<string name="next">Επόμενο</string>
|
||||
<string name="loading_instance">Ανάκτηση πληροφοριών διακομιστή…</string>
|
||||
<string name="error">Σφάλμα</string>
|
||||
<string name="not_a_mastodon_instance">Το %s δε φαίνεται να είναι διακομιστής Mastodon.</string>
|
||||
<string name="ok">ΟΚ</string>
|
||||
<string name="preparing_auth">Προετοιμασία για έλεγχο ταυτότητας…</string>
|
||||
<string name="finishing_auth">Ολοκλήρωση ταυτοποίησης…</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>
|
||||
<string name="user_sent_follow_request">%s σού έστειλε ένα αίτημα ακολούθησης</string>
|
||||
<string name="user_favorited">%s σημείωσε ως αγαπημένη την ανάρτησή σου</string>
|
||||
<string name="notification_boosted">%s ενίσχυσε την ανάρτηση σου</string>
|
||||
<string name="poll_ended">Δες τα αποτελέσματα μιας δημοσκόπησης στην οποία ψήφισες</string>
|
||||
<string name="share_toot_title">Κοινοποίηση</string>
|
||||
<string name="settings">Ρυθμίσεις</string>
|
||||
<string name="publish">Δημοσίευση</string>
|
||||
@@ -22,7 +28,7 @@
|
||||
</plurals>
|
||||
<plurals name="following">
|
||||
<item quantity="one">ακολουθεί</item>
|
||||
<item quantity="other">ακολουθούν</item>
|
||||
<item quantity="other">ακολουθεί</item>
|
||||
</plurals>
|
||||
<string name="posts">Αναρτήσεις</string>
|
||||
<string name="posts_and_replies">Αναρτήσεις και Απαντήσεις</string>
|
||||
@@ -31,6 +37,7 @@
|
||||
<string name="button_follow">Ακολούθησε</string>
|
||||
<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>
|
||||
@@ -78,6 +85,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="confirm_mute">Επιβεβαίωσε για σίγαση %s</string>
|
||||
@@ -96,27 +107,35 @@
|
||||
<string name="button_blocked">Αποκλείστηκε</string>
|
||||
<string name="action_vote">Ψήφισε</string>
|
||||
<string name="delete">Διαγραφή</string>
|
||||
<string name="confirm_delete_title">Διαγραφή ανάρτησης</string>
|
||||
<string name="confirm_delete">Είσαι βέβαιος ότι θες να διαγράψεις την ανάρτηση;</string>
|
||||
<string name="deleting">Διαγραφή…</string>
|
||||
<string name="notification_channel_audio_player">Αναπαραγωγή ήχου</string>
|
||||
<string name="play">Αναπαραγωγή</string>
|
||||
<string name="pause">Παύση</string>
|
||||
<string name="log_out">Αποσύνδεση</string>
|
||||
<string name="add_account">Προσθήκη λογαριασμού</string>
|
||||
<string name="search_hint">Αναζήτηση</string>
|
||||
<string name="hashtags">Ετικέτες</string>
|
||||
<string name="news">Ειδήσεις</string>
|
||||
<string name="for_you">Για σένα</string>
|
||||
<string name="all_notifications">Όλες</string>
|
||||
<string name="mentions">Επισημάνσεις</string>
|
||||
<plurals name="x_people_talking">
|
||||
<item quantity="one">%d άτομο μιλάει</item>
|
||||
<item quantity="other">%d άτομα μιλάνε</item>
|
||||
</plurals>
|
||||
<string name="report_title">Αναφορά %s</string>
|
||||
<string name="report_choose_reason">Τι πάει στραβά με αυτή την ανάρτηση;</string>
|
||||
<string name="report_choose_reason_account">Τι πάει στραβά με τον/την %s;</string>
|
||||
<string name="report_choose_reason_subtitle">Διάλεξε την καλύτερη αντιστοίχιση</string>
|
||||
<string name="report_reason_personal">Δεν μου αρέσει</string>
|
||||
<string name="report_reason_personal_subtitle">Δεν είναι κάτι που θα ήθελες να δεις</string>
|
||||
<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_other">Κάτι άλλο</string>
|
||||
<string name="report_reason_other_subtitle">Το ζήτημα δεν ταιριάζει σε άλλες κατηγορίες</string>
|
||||
<string name="report_choose_rule">Ποιοι κανόνες παραβιάζονται;</string>
|
||||
<string name="report_choose_rule_subtitle">Επίλεξε όλα όσα ισχύουν</string>
|
||||
@@ -125,8 +144,14 @@
|
||||
<string name="report_comment_title">Υπάρχει κάτι άλλο που πρέπει να γνωρίζουμε;</string>
|
||||
<string name="report_comment_hint">Επιπρόσθετα σχόλια</string>
|
||||
<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">Άρση ακολούθησης</string>
|
||||
<string name="mute_user_explain">Δεν θα βλέπεις τις αναρτήσεις του. Εκείνος μπορεί ακόμα να σε ακολουθεί και να βλέπει τις αναρτήσεις σου χωρίς να γνωρίζει ότι είναι σε σίγαση.</string>
|
||||
<string name="block_user_explain">Δε θα βλέπεις τις αναρτήσεις του. Δε θα μπορεί να δει τις αναρτήσεις σου ή να σε ακολουθήσει. Θα μπορεί να δει ότι έχει αποκλειστεί.</string>
|
||||
<string name="report_personal_title">Δε θες να το βλέπεις;</string>
|
||||
<string name="report_personal_subtitle">Αυτές είναι οι επιλογές σου για να ελέγχεις τί βλέπεις στο Mastodon:</string>
|
||||
<string name="back">Πίσω</string>
|
||||
<string name="search_communities">Όνομα διακομιστή ή διεύθυνση URL</string>
|
||||
<string name="instance_rules_title">Κανόνες Διακομιστή</string>
|
||||
@@ -153,14 +178,19 @@
|
||||
<string name="category_tech">Τεχνολογία</string>
|
||||
<string name="confirm_email_title">Έλεγξε τα Εισερχόμενα σου</string>
|
||||
<!-- %s is the email address -->
|
||||
<string name="confirm_email_subtitle">Πάτησε το σύνδεσμο που σού στείλαμε για να επαληθεύσεις το %s. Θα σε περιμένουμε εδώ.</string>
|
||||
<string name="confirm_email_didnt_get">Δεν έλαβες τον σύνδεσμο;</string>
|
||||
<string name="resend">Επαναποστολή</string>
|
||||
<string name="open_email_app">Άνοιγμα εφαρμογής email</string>
|
||||
<string name="resent_email">Το email επιβεβαίωσης εστάλη</string>
|
||||
<string name="compose_hint">Πληκτρολόγησε ή επικόλλησε τί έχεις στο μυαλό σου</string>
|
||||
<string name="content_warning">Προειδοποίηση περιεχομένου</string>
|
||||
<string name="save">Αποθήκευση</string>
|
||||
<string name="add_alt_text">Προσθήκη εναλλακτικού κειμένου</string>
|
||||
<string name="visibility_public">Δημόσιο</string>
|
||||
<string name="visibility_followers_only">Μόνο ακόλουθοι</string>
|
||||
<string name="visibility_private">Μόνο άτομα που επισημαίνω</string>
|
||||
<string name="recent_searches">Πρόσφατα</string>
|
||||
<string name="skip">Παράλειψη</string>
|
||||
<string name="notification_type_follow">Νέοι ακόλουθοι</string>
|
||||
<string name="notification_type_favorite">Αγαπημένα</string>
|
||||
@@ -169,8 +199,14 @@
|
||||
<string name="notification_type_poll">Δημοσκοπήσεις</string>
|
||||
<string name="choose_account">Επιλογή λογαριασμού</string>
|
||||
<string name="err_not_logged_in">Παρακαλώ συνδέσου πρώτα στο Mastodon</string>
|
||||
<plurals name="cant_add_more_than_x_attachments">
|
||||
<item quantity="one">Δεν μπορείς να προσθέσεις περισσότερα από %d συνημμένο πολυμέσων</item>
|
||||
<item quantity="other">Δεν μπορείς να προσθέσεις περισσότερα από %d συνημμένα πολυμέσων</item>
|
||||
</plurals>
|
||||
<string name="media_attachment_unsupported_type">Το αρχείο %s είναι μη υποστηριζόμενου τύπου</string>
|
||||
<string name="media_attachment_too_big">Το αρχείο %1$s υπερβαίνει το όριο μεγέθους των %2$s MB</string>
|
||||
<string name="settings_theme">Εμφάνιση</string>
|
||||
<string name="theme_auto">Χρήση εμφάνισης συσκευής</string>
|
||||
<string name="theme_light">Φωτεινό</string>
|
||||
<string name="theme_dark">Σκοτεινό</string>
|
||||
<string name="settings_behavior">Συμπεριφορά</string>
|
||||
@@ -183,6 +219,9 @@
|
||||
<string name="settings_clear_cache">Εκκαθάριση προσωρινής μνήμης πολυμέσων</string>
|
||||
<string name="settings_app_version">Mastodon για Android v%1$s (%2$d)</string>
|
||||
<string name="media_cache_cleared">Η προσωρινή μνήμη πολυμέσων καθαρίστηκε</string>
|
||||
<string name="confirm_log_out">Αποσύνδεση από %s;</string>
|
||||
<string name="sensitive_content_explain">Ο συντάκτης επισήμανε αυτό το πολυμέσο ως ευαίσθητο.</string>
|
||||
<string name="avatar_description">Μετάβαση στο προφίλ του %s</string>
|
||||
<string name="more_options">Περισσότερες επιλογές</string>
|
||||
<string name="new_post">Νέα ανάρτηση</string>
|
||||
<string name="button_reply">Απάντηση</string>
|
||||
@@ -198,6 +237,7 @@
|
||||
<string name="media_viewer">Αναπαραγωγέας πολυμέσων</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>
|
||||
@@ -215,7 +255,13 @@
|
||||
<string name="error_saving_file">Σφάλμα αποθήκευσης αρχείου</string>
|
||||
<string name="file_saved">Το αρχείο αποθηκεύτηκε</string>
|
||||
<string name="downloading">Λήψη…</string>
|
||||
<string name="no_app_to_handle_action">Δεν υπάρχει εφαρμογή για να χειριστεί αυτήν την ενέργεια</string>
|
||||
<string name="local_timeline">Τοπική</string>
|
||||
<string name="trending_posts_info_banner">Αναρτήσεις που κερδίζουν την προσοχή σε όλο το Mastodon.</string>
|
||||
<string name="trending_links_info_banner">Οι ειδήσεις που συζητούνται στο Mastodon.</string>
|
||||
<!-- %s is the server domain -->
|
||||
<string name="local_timeline_info_banner">Αυτές είναι όλες οι αναρτήσεις από όλους τους χρήστες στο διακομιστή σου (%s).</string>
|
||||
<string name="recommended_accounts_info_banner">Μπορεί να σου αρέσουν αυτοί οι λογαριασμοί με βάση άλλους που ακολουθείς.</string>
|
||||
<string name="see_new_posts">Δες νέες αναρτήσεις</string>
|
||||
<string name="load_missing_posts">Φόρτωση αναρτήσεων που λείπουν</string>
|
||||
<string name="follow_back">Ακολούθησε και εσύ</string>
|
||||
@@ -252,7 +298,7 @@
|
||||
<item quantity="one">%d λεπτό πριν</item>
|
||||
<item quantity="other">%d λεπτά πριν</item>
|
||||
</plurals>
|
||||
<string name="edited_timestamp">επεξεργάστηκε στις %s</string>
|
||||
<string name="edited_timestamp">επεξεργάστηκε %s</string>
|
||||
<string name="edit_original_post">Αρχική ανάρτηση</string>
|
||||
<string name="edit_text_edited">Το κείμενο επεξεργάστηκε</string>
|
||||
<string name="edit_spoiler_added">Προστέθηκε προειδοποίηση περιεχομένου</string>
|
||||
@@ -293,6 +339,7 @@
|
||||
<string name="login_title">Καλώς Ήρθες Ξανά</string>
|
||||
<string name="login_subtitle">Συνδέσου με τον διακομιστή όπου δημιούργησες τον λογαριασμό σου.</string>
|
||||
<string name="server_url">URL διακομιστή</string>
|
||||
<string name="signup_random_server_explain">Θα επιλέξουμε έναν διακομιστή με βάση τη γλώσσα σου αν συνεχίσεις χωρίς να κάνεις κάποια επιλογή.</string>
|
||||
<string name="server_filter_any_language">Οποιαδήποτε Γλώσσα</string>
|
||||
<string name="server_filter_instant_signup">Άμεση Εγγραφή</string>
|
||||
<string name="server_filter_manual_review">Χειροκίνητη Αξιολόγηση</string>
|
||||
@@ -305,6 +352,7 @@
|
||||
<string name="server_filter_region_oceania">Oceania</string>
|
||||
<string name="not_accepting_new_members">Δεν δέχεται νέα μέλη</string>
|
||||
<string name="category_special_interests">Ειδικά Ενδιαφέροντα</string>
|
||||
<string name="signup_passwords_dont_match">Οι κωδικοί πρόσβασης δεν ταιριάζουν</string>
|
||||
<string name="pick_server_for_me">Διάλεξε για μένα</string>
|
||||
<string name="profile_add_row">Προσθήκη γραμμής</string>
|
||||
<string name="profile_setup">Ρύθμιση προφίλ</string>
|
||||
@@ -313,12 +361,14 @@
|
||||
<string name="popular_on_mastodon">Δημοφιλή στο Mastodon</string>
|
||||
<string name="follow_all">Ακολούθησε όλους</string>
|
||||
<string name="server_rules_disagree">Διαφωνώ</string>
|
||||
<string name="privacy_policy_explanation">Σύνοψη: Δεν συλλέγουμε ή επεξεργαζόμαστε τίποτα.</string>
|
||||
<!-- %s is server domain -->
|
||||
<string name="server_policy_disagree">Διαφωνώ με %s</string>
|
||||
<string name="profile_bio">Βιογραφικό</string>
|
||||
<!-- Shown in a progress dialog when you tap "follow all" -->
|
||||
<string name="sending_follows">Ακολούθηση χρηστών…</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 δεν επιτρέπει εγγραφές από τον %2$s. Δοκίμασε κάποιον άλλο ή <a> διάλεξε έναν διαφορετικό διακομιστή</a>.</string>
|
||||
<string name="spoiler_show">Εμφάνιση ούτως ή άλλως</string>
|
||||
<string name="spoiler_hide">Απόκρυψη ξανά</string>
|
||||
<string name="poll_multiple_choice">Επίλεξε ένα ή περισσότερα</string>
|
||||
@@ -337,16 +387,216 @@
|
||||
<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>
|
||||
<string name="confirm_log_out_all_accounts">Αποσύνδεση από όλους τους λογαριασμούς;</string>
|
||||
<string name="retry">Επανάληψη</string>
|
||||
<string name="post_failed">Αποτυχία αποστολής ανάρτησης</string>
|
||||
<!-- %s is formatted file size ("467 KB image") -->
|
||||
<string name="attachment_description_image">%s εικόνα</string>
|
||||
<string name="attachment_description_video">%s βίντεο</string>
|
||||
<string name="attachment_description_audio">%s ήχος</string>
|
||||
<string name="attachment_description_unknown">%s αρχείο</string>
|
||||
<string name="attachment_type_image">Εικόνα</string>
|
||||
<string name="attachment_type_video">Βίντεο</string>
|
||||
<string name="attachment_type_audio">Ήχος</string>
|
||||
<string name="attachment_type_gif">GIF</string>
|
||||
<string name="attachment_type_unknown">Αρχείο</string>
|
||||
<string name="attachment_x_percent_uploaded">%d%% μεταφορτώθηκε</string>
|
||||
<string name="add_poll_option">Προσθήκη επιλογής δημοσκόπησης</string>
|
||||
<string name="poll_length">Μήκος δημοσκόπησης</string>
|
||||
<string name="poll_style">Στυλ</string>
|
||||
<string name="compose_poll_single_choice">Διάλεξε ένα</string>
|
||||
<string name="compose_poll_multiple_choice">Πολλαπλής επιλογής</string>
|
||||
<string name="delete_poll_option">Διαγραφή επιλογής δημοσκόπησης</string>
|
||||
<string name="poll_style_title">Στυλ δημοσκόπησης</string>
|
||||
<string name="alt_text">Εναλλακτικό κείμενο</string>
|
||||
<string name="help">Βοήθεια</string>
|
||||
<string name="what_is_alt_text">Τι είναι το εναλλακτικό κείμενο;</string>
|
||||
<string name="alt_text_help">Το εναλλακτικό κείμενο παρέχει περιγραφές εικόνας για άτομα με προβλήματα όρασης, συνδέσεις χαμηλής ταχύτητας ή για άτομα που αναζητούν επιπλέον περιεχόμενο.\n\nΜπορείς να βελτιώσεις την προσβασιμότητα και την κατανόηση για όλους, γράφοντας σαφές, συνοπτικό και αντικειμενικό εναλλακτικό κείμενο.\n\n<ul><li>Κατέγραψε σημαντικά στοιχεία</li>\n<li>Συνόψισε κείμενο σε εικόνες</li>\n<li>Χρησιμοποίησε δομή κανονικής πρότασης</li>\n<li>Απέφυγε περιττές πληροφορίες</li>\n<li>Εστίασε στις τάσεις και τα βασικά ευρήματα σε σύνθετα οπτικά στοιχεία (όπως διαγράμματα ή χάρτες)</li></ul></string>
|
||||
<string name="edit_post">Επεξεργασία ανάρτησης</string>
|
||||
<string name="no_verified_link">Χωρίς επαληθευμένο σύνδεσμο</string>
|
||||
<string name="compose_autocomplete_emoji_empty">Περιήγηση emoji</string>
|
||||
<string name="compose_autocomplete_users_empty">Βρες αυτόν που ψάχνεις</string>
|
||||
<string name="no_search_results">Δεν βρέθηκε τίποτα με αυτούς τους όρους αναζήτησης</string>
|
||||
<string name="language">Γλώσσα</string>
|
||||
<string name="language_default">Προεπιλογή</string>
|
||||
<string name="language_system">Σύστημα</string>
|
||||
<string name="language_detecting">Ανίχνευση γλώσσας</string>
|
||||
<string name="language_cant_detect">Αδυναμία εντοπισμού γλώσσας</string>
|
||||
<string name="language_detected">Εντοπίστηκε</string>
|
||||
<string name="media_hidden">Κρυμμένο πολυμέσο</string>
|
||||
<string name="post_hidden">Κρυφή ανάρτηση</string>
|
||||
<string name="report_title_post">Αναφορά ανάρτησης</string>
|
||||
<string name="forward_report_explanation">Ο λογαριασμός είναι από διαφορετικό διακομιστή. Να σταλεί ανώνυμο αντίγραφο της αναφοράς και εκεί;</string>
|
||||
<!-- %s is the server domain -->
|
||||
<string name="forward_report_to_server">Προώθηση σε %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">Αναφέρθηκε</string>
|
||||
<string name="report_unfollow_explanation">Για να μην βλέπεις τις αναρτήσεις του στην αρχική σου ροή πια, μην τον ακολουθείς.</string>
|
||||
<string name="muted_user">Έγινε σίγαση %s</string>
|
||||
<string name="report_sent_already_blocked">Έχεις ήδη αποκλείσει αυτόν τον χρήστη, οπότε δεν υπάρχει τίποτα άλλο που πρέπει να κάνεις όσο εξετάζουμε την αναφορά σου.</string>
|
||||
<string name="report_personal_already_blocked">Έχεις ήδη αποκλείσει αυτόν τον χρήστη, οπότε δεν υπάρχει τίποτα άλλο που πρέπει να κάνεις.\n\nΕυχαριστούμε που βοηθάς να παραμείνει το Mastodon ένα ασφαλές μέρος για όλους!</string>
|
||||
<string name="blocked_user">Αποκλείστηκε %s</string>
|
||||
<string name="mark_all_notifications_read">Σήμανση όλων ως αναγνωσμένα</string>
|
||||
<string name="settings_display">Εμφάνιση</string>
|
||||
<string name="settings_filters">Φίλτρα</string>
|
||||
<string name="settings_server_explanation">Επισκόπηση, κανόνες, συντονιστές</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">Σχετικά με το %s</string>
|
||||
<string name="default_post_language">Προεπιλεγμένη γλώσσα ανάρτησης</string>
|
||||
<string name="settings_alt_text_reminders">Προσθήκη υπενθυμίσεων για εναλλακτικό κείμενο</string>
|
||||
<string name="settings_confirm_unfollow">Ερώτηση πριν την κατάργηση ακολούθησης κάποιου</string>
|
||||
<string name="settings_confirm_boost">Ερώτηση πριν την ενίσχυση</string>
|
||||
<string name="settings_confirm_delete_post">Ερώτηση πριν τη διαγραφή αναρτήσεων</string>
|
||||
<string name="pause_all_notifications">Παύση όλων</string>
|
||||
<string name="pause_notifications_off">Ανενεργό</string>
|
||||
<string name="notifications_policy_anyone">Οποιοσδήποτε</string>
|
||||
<string name="notifications_policy_followed">Άτομα που σε ακολουθούν</string>
|
||||
<string name="notifications_policy_follower">Άτομα που ακολουθείς</string>
|
||||
<string name="notifications_policy_no_one">Κανείς</string>
|
||||
<string name="settings_notifications_policy">Λήψη ειδοποιήσεων από</string>
|
||||
<string name="notification_type_mentions_and_replies">Επισημάνσεις και απαντήσεις</string>
|
||||
<string name="pause_all_notifications_title">Παύση όλων των ειδοποιήσεων</string>
|
||||
<plurals name="x_weeks">
|
||||
<item quantity="one">%d εβδομάδα</item>
|
||||
<item quantity="other">%d εβδομάδες</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 στις %2$s</string>
|
||||
<string name="today">σήμερα</string>
|
||||
<string name="yesterday">χθες</string>
|
||||
<string name="tomorrow">αύριο</string>
|
||||
<!-- %s is the timestamp ("tomorrow at 12:34") -->
|
||||
<string name="pause_notifications_ends">Μέχρι %s</string>
|
||||
<!-- %s is the timestamp ("tomorrow at 12:34") -->
|
||||
<string name="pause_notifications_banner">Οι ειδοποιήσεις θα επανέλθουν %s.</string>
|
||||
<string name="resume_notifications_now">Συνέχιση τώρα</string>
|
||||
<string name="open_system_notification_settings">Μετάβαση στις ρυθμίσεις ειδοποιήσεων</string>
|
||||
<string name="about_server">Σχετικά</string>
|
||||
<string name="server_rules">Κανόνες</string>
|
||||
<string name="server_administrator">Διαχειριστής</string>
|
||||
<string name="send_email_to_server_admin">Στείλε μήνυμα σε διαχειριστή</string>
|
||||
<string name="notifications_disabled_in_system">Ενεργοποίησε τις ειδοποιήσεις από τις ρυθμίσεις της συσκευής σου για να δεις ενημερώσεις από οπουδήποτε.</string>
|
||||
<string name="settings_even_more">Ακόμη περισσότερες ρυθμίσεις</string>
|
||||
<string name="settings_show_cws">Εμφάνιση προειδοποιήσεων περιεχομένου</string>
|
||||
<string name="settings_hide_sensitive_media">Κάλυψη μέσων που χαρακτηρίζονται ως ευαίσθητα</string>
|
||||
<string name="settings_show_interaction_counts">Αριθμός αλληλεπιδράσεων ανάρτησης</string>
|
||||
<string name="settings_show_emoji_in_names">Προσαρμοσμένα emoji στα εμφανιζόμενα ονόματα</string>
|
||||
<plurals name="in_x_seconds">
|
||||
<item quantity="one">σε %d δευτερόλεπτο</item>
|
||||
<item quantity="other">σε %d δευτερόλεπτα</item>
|
||||
</plurals>
|
||||
<plurals name="in_x_minutes">
|
||||
<item quantity="one">σε %d λεπτό</item>
|
||||
<item quantity="other">σε %d λεπτά</item>
|
||||
</plurals>
|
||||
<plurals name="in_x_hours">
|
||||
<item quantity="one">σε %d ώρα</item>
|
||||
<item quantity="other">σε %d ώρες</item>
|
||||
</plurals>
|
||||
<plurals name="x_hours_ago">
|
||||
<item quantity="one">%d ώρα πριν</item>
|
||||
<item quantity="other">%d ώρες πριν</item>
|
||||
</plurals>
|
||||
<string name="alt_text_reminder_title">Το πολυμέσο δεν έχει εναλλακτικό κείμενο</string>
|
||||
<plurals name="alt_text_reminder_x_images">
|
||||
<item quantity="one">%s εκ των εικόνων σου δεν έχει εναλλακτικό κείμενο. Ανάρτηση ούτως ή άλλως;</item>
|
||||
<item quantity="other">%s εκ των εικόνων σου δεν έχει εναλλακτικό κείμενο. Ανάρτηση ούτως ή άλλως;</item>
|
||||
</plurals>
|
||||
<plurals name="alt_text_reminder_x_attachments">
|
||||
<item quantity="one">%s εκ των συνημμένων πολυμέσων σου δεν έχει εναλλακτικό κείμενο. Ανάρτηση ούτως ή άλλως;</item>
|
||||
<item quantity="other">%s εκ των συνημμένων πολυμέσων σου δεν έχουν εναλλακτικό κείμενο. Ανάρτηση ούτως ή άλλως;</item>
|
||||
</plurals>
|
||||
<string name="count_one">Ένα</string>
|
||||
<string name="count_two">Δύο</string>
|
||||
<string name="count_three">Τρία</string>
|
||||
<string name="count_four">Τέσσερα</string>
|
||||
<string name="alt_text_reminder_post_anyway">Ανάρτηση</string>
|
||||
<!-- %s is the username -->
|
||||
<string name="unfollow_confirmation">Άρση ακολούθησης του %s;</string>
|
||||
<string name="filter_active">Ενεργός</string>
|
||||
<string name="filter_inactive">Ανενεργός</string>
|
||||
<string name="settings_add_filter">Προσθήκη φίλτρου</string>
|
||||
<string name="settings_edit_filter">Επεξεργασία φίλτρου</string>
|
||||
<string name="settings_filter_duration">Διάρκεια</string>
|
||||
<string name="settings_filter_muted_words">Αποσιωπημένες λέξεις</string>
|
||||
<string name="settings_filter_context">Σίγαση από</string>
|
||||
<string name="settings_filter_show_cw">Εμφάνιση με προειδοποίηση περιεχομένου</string>
|
||||
<string name="settings_filter_show_cw_explanation">Να εμφανίζονται και πάλι οι αναρτήσεις που ταιριάζουν με αυτό το φίλτρο, αλλά πίσω από μια προειδοποίηση περιεχομένου</string>
|
||||
<string name="settings_delete_filter">Διαγραφή φίλτρου</string>
|
||||
<string name="filter_duration_forever">Για πάντα</string>
|
||||
<!-- %s is the timestamp ("tomorrow at 12:34") -->
|
||||
<string name="settings_filter_ends">Μέχρι %s</string>
|
||||
<plurals name="settings_x_muted_words">
|
||||
<item quantity="one">%d λέξη ή φράση σε σίγαση</item>
|
||||
<item quantity="other">%d λέξεις ή φράσεις σε σίγαση</item>
|
||||
</plurals>
|
||||
<string name="selection_2_options">%1$s και %2$s</string>
|
||||
<string name="selection_3_options">%1$s, %2$s και %3$s</string>
|
||||
<string name="selection_4_or_more">%1$s, %2$s και %3$d ακόμη</string>
|
||||
<string name="filter_context_home_lists">Αρχική & λίστες</string>
|
||||
<string name="filter_context_notifications">Ειδοποιήσεις</string>
|
||||
<string name="filter_context_public_timelines">Δημόσιες ροές</string>
|
||||
<string name="filter_context_threads_replies">Νήματα & απαντήσεις</string>
|
||||
<string name="filter_context_profiles">Προφίλ</string>
|
||||
<string name="settings_filter_title">Τίτλος</string>
|
||||
<string name="settings_delete_filter_title">Διαγραφή φίλτρου “%s”;</string>
|
||||
<string name="settings_delete_filter_confirmation">Αυτό το φίλτρο θα διαγραφεί από το λογαριασμό σου σε όλες σου τις συσκευές.</string>
|
||||
<string name="add_muted_word">Προσθήκη λέξης σε σίγαση</string>
|
||||
<string name="edit_muted_word">Επεξεργασία λέξης σε σίγαση</string>
|
||||
<string name="add">Προσθήκη</string>
|
||||
<string name="filter_word_or_phrase">Λέξη ή φράση</string>
|
||||
<string name="filter_add_word_help">Οι λέξεις είναι case insensitive και ταιριάζουν μόνο με πλήρεις λέξεις.\n\nΑν φιλτράρετε τη λέξη-κλειδί “Apple,” θα κρύψει δημοσιεύσεις που περιέχουν “apple” ή “aPpLe” αλλά όχι “pinapple”</string>
|
||||
<string name="settings_delete_filter_word">Διαγραφή λέξης “%s”;</string>
|
||||
<string name="enter_selection_mode">Επιλογή</string>
|
||||
<string name="select_all">Επιλογή όλων</string>
|
||||
<string name="settings_filter_duration_title">Διάρκεια φίλτρου</string>
|
||||
<string name="filter_duration_custom">Προσαρμοσμένο</string>
|
||||
<plurals name="settings_delete_x_filter_words">
|
||||
<item quantity="one">Διαγραφή %d λέξης;</item>
|
||||
<item quantity="other">Διαγραφή %d λέξεων;</item>
|
||||
</plurals>
|
||||
<plurals name="x_items_selected">
|
||||
<item quantity="one">%d επιλεγμένο</item>
|
||||
<item quantity="other">%d επιλεγμένα</item>
|
||||
</plurals>
|
||||
<string name="required_form_field_blank">Δε μπορεί να είναι κενό</string>
|
||||
<string name="filter_word_already_in_list">Ήδη στη λίστα</string>
|
||||
<string name="app_update_ready">Η ενημέρωση εφαρμογής είναι έτοιμη</string>
|
||||
<string name="app_update_version">Έκδοση %s</string>
|
||||
<string name="downloading_update">Λήψη (%d%%)</string>
|
||||
<!-- Shown like a content warning, %s is the name of the filter -->
|
||||
<string name="post_matches_filter_x">Ταιριάζει με το φίλτρο “%s”</string>
|
||||
<string name="search_mastodon">Αναζήτηση στο Mastodon</string>
|
||||
<string name="clear_all">Εκκαθάριση όλων</string>
|
||||
<string name="search_open_url">Άνοιγμα διεύθυνσης URL στο Mastodon</string>
|
||||
<string name="posts_matching_hashtag">Αναρτήσεις με “%s”</string>
|
||||
<string name="search_go_to_account">Μετάβαση σε %s</string>
|
||||
<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>
|
||||
<!-- %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>
|
||||
|
||||
@@ -4,12 +4,18 @@
|
||||
<string name="next">Siguiente</string>
|
||||
<string name="loading_instance">Recuperando información del servidor…</string>
|
||||
<string name="error">Error</string>
|
||||
<string name="not_a_mastodon_instance">%s no parece ser un servidor de Mastodon.</string>
|
||||
<string name="ok">Aceptar</string>
|
||||
<string name="preparing_auth">Preparando para autenticación…</string>
|
||||
<string name="finishing_auth">Finalizando autenticación…</string>
|
||||
<string name="user_boosted">%s retooteó</string>
|
||||
<string name="in_reply_to">En respuesta a %s</string>
|
||||
<string name="notifications">Notificaciones</string>
|
||||
<string name="user_followed_you">%s te ha seguido</string>
|
||||
<string name="user_sent_follow_request">%s te envió una solicitud de seguimiento</string>
|
||||
<string name="user_favorited">%s ha marcado tu publicación como favorita</string>
|
||||
<string name="notification_boosted">%s ha impulsado tu publicación</string>
|
||||
<string name="poll_ended">Ver los resultados de una encuesta en la que votaste</string>
|
||||
<string name="share_toot_title">Compartir</string>
|
||||
<string name="settings">Ajustes</string>
|
||||
<string name="publish">Publicar</string>
|
||||
@@ -31,6 +37,7 @@
|
||||
<string name="button_follow">Seguir</string>
|
||||
<string name="button_following">Siguiendo</string>
|
||||
<string name="edit_profile">Editar perfil</string>
|
||||
<string name="share_user">Compartir perfil</string>
|
||||
<string name="mute_user">Silenciar a %s</string>
|
||||
<string name="unmute_user">Dejar de silenciar a %s</string>
|
||||
<string name="block_user">Bloquear a %s</string>
|
||||
@@ -78,6 +85,10 @@
|
||||
<item quantity="one">%d día restante</item>
|
||||
<item quantity="other">%d días restantes</item>
|
||||
</plurals>
|
||||
<plurals name="x_votes">
|
||||
<item quantity="one">%,d voto</item>
|
||||
<item quantity="other">%,d votos</item>
|
||||
</plurals>
|
||||
<string name="poll_closed">Cerrado</string>
|
||||
<string name="confirm_mute_title">Silenciar cuenta</string>
|
||||
<string name="confirm_mute">Confirmar para silenciar a %s</string>
|
||||
@@ -96,27 +107,35 @@
|
||||
<string name="button_blocked">Bloqueado</string>
|
||||
<string name="action_vote">Votar</string>
|
||||
<string name="delete">Eliminar</string>
|
||||
<string name="confirm_delete_title">Eliminar publicación</string>
|
||||
<string name="confirm_delete">¿Confirma que quiere eliminar esta publicación?</string>
|
||||
<string name="deleting">Eliminando…</string>
|
||||
<string name="notification_channel_audio_player">Reproducción de audio</string>
|
||||
<string name="play">Reproducir</string>
|
||||
<string name="pause">Pausar</string>
|
||||
<string name="log_out">Cerrar sesión</string>
|
||||
<string name="add_account">Añadir cuenta</string>
|
||||
<string name="search_hint">Buscar</string>
|
||||
<string name="hashtags">Etiquetas</string>
|
||||
<string name="news">Noticias</string>
|
||||
<string name="for_you">Para ti</string>
|
||||
<string name="all_notifications">Todo</string>
|
||||
<string name="mentions">Menciones</string>
|
||||
<plurals name="x_people_talking">
|
||||
<item quantity="one">%d persona está hablando</item>
|
||||
<item quantity="other">%d personas están hablando</item>
|
||||
</plurals>
|
||||
<string name="report_title">Denunciar a %s</string>
|
||||
<string name="report_choose_reason">¿Qué hay de malo en esta publicación?</string>
|
||||
<string name="report_choose_reason_account">¿Qué hay de malo con %s?</string>
|
||||
<string name="report_choose_reason_subtitle">Seleccione la mejor opción</string>
|
||||
<string name="report_reason_personal">No me gusta</string>
|
||||
<string name="report_reason_personal_subtitle">No es algo que quieras ver</string>
|
||||
<string name="report_reason_spam">Es spam</string>
|
||||
<string name="report_reason_spam_subtitle">Enlaces maliciosos, interacciones falsas o respuestas repetitivas</string>
|
||||
<string name="report_reason_violation">Viola las reglas del servidor</string>
|
||||
<string name="report_reason_violation_subtitle">Eres consciente de que infringe normas específicas</string>
|
||||
<string name="report_reason_other">Es otra cosa</string>
|
||||
<string name="report_reason_other_subtitle">El problema no encaja en otras categorías</string>
|
||||
<string name="report_choose_rule">¿Qué normas se están violando?</string>
|
||||
<string name="report_choose_rule_subtitle">Selecciona todos los que correspondan</string>
|
||||
@@ -125,8 +144,14 @@
|
||||
<string name="report_comment_title">¿Hay algo más que deberíamos saber?</string>
|
||||
<string name="report_comment_hint">Comentarios adicionales</string>
|
||||
<string name="sending_report">Enviando denuncia…</string>
|
||||
<string name="report_sent_title">Gracias por reportar, lo revisaremos.</string>
|
||||
<string name="report_sent_subtitle">Mientras revisamos esto, puedes tomar medidas contra %s:</string>
|
||||
<string name="unfollow_user">Dejar de seguir a %s</string>
|
||||
<string name="unfollow">Dejar de seguir</string>
|
||||
<string name="mute_user_explain">No verás sus mensajes. Todavía pueden seguirte y ver tus mensajes y no sabrán que están silenciados.</string>
|
||||
<string name="block_user_explain">No verás sus mensajes. No podrán ver tus publicaciones ni seguirte. Podrán decir que están bloqueados.</string>
|
||||
<string name="report_personal_title">¿No quiere ver esto?</string>
|
||||
<string name="report_personal_subtitle">Aquí están tus opciones para controlar lo que ves en Mastodon:</string>
|
||||
<string name="back">Atrás</string>
|
||||
<string name="search_communities">Nombre del servidor o URL</string>
|
||||
<string name="instance_rules_title">Reglas del servidor</string>
|
||||
@@ -153,14 +178,19 @@
|
||||
<string name="category_tech">Tecnología</string>
|
||||
<string name="confirm_email_title">Revisa tu bandeja de entrada</string>
|
||||
<!-- %s is the email address -->
|
||||
<string name="confirm_email_subtitle">Pulsa el enlace que te hemos enviado para verificar %s. Esperaremos aquí mismo.</string>
|
||||
<string name="confirm_email_didnt_get">¿No recibiste un enlace?</string>
|
||||
<string name="resend">Reenviar</string>
|
||||
<string name="open_email_app">Abrir aplicación de email</string>
|
||||
<string name="resent_email">Correo de confirmación enviado</string>
|
||||
<string name="compose_hint">Escribe o pega lo que tengas en mente</string>
|
||||
<string name="content_warning">Advertencia de contenido</string>
|
||||
<string name="save">Guardar</string>
|
||||
<string name="add_alt_text">Añadir texto alternativo</string>
|
||||
<string name="visibility_public">Público</string>
|
||||
<string name="visibility_followers_only">Sólo seguidores</string>
|
||||
<string name="visibility_private">Solo personas mencionadas</string>
|
||||
<string name="recent_searches">Recientes</string>
|
||||
<string name="skip">Saltar</string>
|
||||
<string name="notification_type_follow">Nuevos seguidores</string>
|
||||
<string name="notification_type_favorite">Favoritos</string>
|
||||
@@ -169,8 +199,14 @@
|
||||
<string name="notification_type_poll">Encuestas</string>
|
||||
<string name="choose_account">Elegir cuenta</string>
|
||||
<string name="err_not_logged_in">Por favor inicie sesión primero en Mastodon</string>
|
||||
<plurals name="cant_add_more_than_x_attachments">
|
||||
<item quantity="one">No puede añadir más de %d archivo adjunto</item>
|
||||
<item quantity="other">No puede añadir más de %d archivos adjuntos</item>
|
||||
</plurals>
|
||||
<string name="media_attachment_unsupported_type">El archivo %s es de un tipo no compatible</string>
|
||||
<string name="media_attachment_too_big">El archivo %1$s supera el límite de tamaño de %2$s MB</string>
|
||||
<string name="settings_theme">Apariencia</string>
|
||||
<string name="theme_auto">Usar apariencia del dispositivo</string>
|
||||
<string name="theme_light">Claro</string>
|
||||
<string name="theme_dark">Oscuro</string>
|
||||
<string name="settings_behavior">Comportamiento</string>
|
||||
@@ -183,6 +219,9 @@
|
||||
<string name="settings_clear_cache">Limpiar caché multimedia</string>
|
||||
<string name="settings_app_version">Mastodon para Android -%1$s (%2$d)</string>
|
||||
<string name="media_cache_cleared">Caché multimedia borrada</string>
|
||||
<string name="confirm_log_out">¿Cerrar sesión de %s?</string>
|
||||
<string name="sensitive_content_explain">El autor ha marcado este medio como sensible.</string>
|
||||
<string name="avatar_description">Ir al perfil de %s</string>
|
||||
<string name="more_options">Más opciones</string>
|
||||
<string name="new_post">Nuevo post</string>
|
||||
<string name="button_reply">Responder</string>
|
||||
@@ -198,6 +237,7 @@
|
||||
<string name="media_viewer">Visor de medios</string>
|
||||
<string name="follow_user">Seguir a %s</string>
|
||||
<string name="unfollowed_user">No sigues a %s</string>
|
||||
<string name="followed_user">Ahora estás siguiendo a %s</string>
|
||||
<string name="following_user_requested">%s solicitó seguirte</string>
|
||||
<string name="open_in_browser">Abrir en el navegador</string>
|
||||
<string name="hide_boosts_from_user">Ocultar retoots de %s</string>
|
||||
@@ -215,7 +255,13 @@
|
||||
<string name="error_saving_file">Error al guardar el archivo</string>
|
||||
<string name="file_saved">Archivo guardado</string>
|
||||
<string name="downloading">Descargando…</string>
|
||||
<string name="no_app_to_handle_action">No hay ninguna aplicación para manejar esta acción</string>
|
||||
<string name="local_timeline">Local</string>
|
||||
<string name="trending_posts_info_banner">Estas son las publicaciones que están ganando tracción a través de Mastodon.</string>
|
||||
<string name="trending_links_info_banner">Estas son las noticias de las que se habla en Mastodon.</string>
|
||||
<!-- %s is the server domain -->
|
||||
<string name="local_timeline_info_banner">Estos son todos los mensajes de todos los usuarios de tu servidor (%s).</string>
|
||||
<string name="recommended_accounts_info_banner">Es posible que te gusten estas cuentas basadas en otras que sigues.</string>
|
||||
<string name="see_new_posts">Ver nuevas publicaciones</string>
|
||||
<string name="load_missing_posts">Cargar publicaciones faltantes</string>
|
||||
<string name="follow_back">Seguir de vuelta</string>
|
||||
@@ -293,6 +339,7 @@
|
||||
<string name="login_title">Qué bueno verle de nuevo</string>
|
||||
<string name="login_subtitle">Inicie sesión con el servidor donde creó su cuenta.</string>
|
||||
<string name="server_url">URL del servidor</string>
|
||||
<string name="signup_random_server_explain">Seleccionaremos un servidor basado en tu idioma si continúas sin hacer una selección.</string>
|
||||
<string name="server_filter_any_language">Cualquier idioma</string>
|
||||
<string name="server_filter_instant_signup">Registro instantáneo</string>
|
||||
<string name="server_filter_manual_review">Revisión manual</string>
|
||||
@@ -305,6 +352,7 @@
|
||||
<string name="server_filter_region_oceania">Oceanía</string>
|
||||
<string name="not_accepting_new_members">No se aceptan nuevos miembros</string>
|
||||
<string name="category_special_interests">Intereses especiales</string>
|
||||
<string name="signup_passwords_dont_match">Las contraseñas no coinciden</string>
|
||||
<string name="pick_server_for_me">Elegir por mí</string>
|
||||
<string name="profile_add_row">Añadir fila</string>
|
||||
<string name="profile_setup">Configuración del perfil</string>
|
||||
@@ -313,12 +361,14 @@
|
||||
<string name="popular_on_mastodon">Popular en Mastodon</string>
|
||||
<string name="follow_all">Seguir a todos</string>
|
||||
<string name="server_rules_disagree">En desacuerdo</string>
|
||||
<string name="privacy_policy_explanation">Resumen: No recogemos ni procesamos nada.</string>
|
||||
<!-- %s is server domain -->
|
||||
<string name="server_policy_disagree">En desacuerdo con %s</string>
|
||||
<string name="profile_bio">Biografía</string>
|
||||
<!-- Shown in a progress dialog when you tap "follow all" -->
|
||||
<string name="sending_follows">Siguiendo usuarios…</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 no permite registros de %2$s. Prueba uno diferente o <a>elige un servidor diferente</a>.</string>
|
||||
<string name="spoiler_show">Mostrar de todos modos</string>
|
||||
<string name="spoiler_hide">Volver a ocultar</string>
|
||||
<string name="poll_multiple_choice">Escoge una o más</string>
|
||||
@@ -337,16 +387,192 @@
|
||||
<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>
|
||||
<string name="confirm_log_out_all_accounts">¿Cerrar sesión de todas las cuentas?</string>
|
||||
<string name="retry">Reintentar</string>
|
||||
<string name="post_failed">Error al enviar la publicación</string>
|
||||
<!-- %s is formatted file size ("467 KB image") -->
|
||||
<string name="attachment_description_image">Imagen %s</string>
|
||||
<string name="attachment_description_video">Vídeo %s</string>
|
||||
<string name="attachment_description_audio">Audio %s</string>
|
||||
<string name="attachment_description_unknown">Archivo %s</string>
|
||||
<string name="attachment_type_image">Imagen</string>
|
||||
<string name="attachment_type_video">Vídeo</string>
|
||||
<string name="attachment_type_audio">Audio</string>
|
||||
<string name="attachment_type_gif">GIF</string>
|
||||
<string name="attachment_type_unknown">Archivo</string>
|
||||
<string name="attachment_x_percent_uploaded">%d%% subido</string>
|
||||
<string name="add_poll_option">Añadir opción de encuesta</string>
|
||||
<string name="poll_length">Longitud de la encuesta</string>
|
||||
<string name="poll_style">Estilo</string>
|
||||
<string name="compose_poll_single_choice">Elige uno</string>
|
||||
<string name="compose_poll_multiple_choice">Múltiples opciones</string>
|
||||
<string name="delete_poll_option">Borrar opción de encuesta</string>
|
||||
<string name="poll_style_title">Estilo de encuesta</string>
|
||||
<string name="alt_text">Texto alternativo</string>
|
||||
<string name="help">Ayuda</string>
|
||||
<string name="what_is_alt_text">¿Qué es el texto alternativo?</string>
|
||||
<string name="edit_post">Editar publicación</string>
|
||||
<string name="no_verified_link">Enlace no verificado</string>
|
||||
<string name="compose_autocomplete_emoji_empty">Explorar emojis</string>
|
||||
<string name="compose_autocomplete_users_empty">Encuentra quién estás buscando</string>
|
||||
<string name="no_search_results">No se pudo encontrar nada para estos términos de búsqueda</string>
|
||||
<string name="language">Idioma</string>
|
||||
<string name="language_default">Predeterminado</string>
|
||||
<string name="language_system">Sistema</string>
|
||||
<string name="language_detecting">Detectando idioma</string>
|
||||
<string name="language_cant_detect">No se puede detectar el idioma</string>
|
||||
<string name="language_detected">Detectado</string>
|
||||
<string name="media_hidden">Medios ocultos</string>
|
||||
<string name="post_hidden">Publicación ocultada</string>
|
||||
<string name="report_title_post">Reportar publicación</string>
|
||||
<string name="forward_report_explanation">La cuenta es de otro servidor. ¿Enviar también una copia anónima de este informe?</string>
|
||||
<!-- %s is the server domain -->
|
||||
<string name="forward_report_to_server">Reenviar a %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">Reportado</string>
|
||||
<string name="muted_user">Silenciado %s</string>
|
||||
<string name="report_sent_already_blocked">Ya has bloqueado a este usuario, así que no tienes nada más que hacer mientras revisamos tu informe.</string>
|
||||
<string name="report_personal_already_blocked">Ya has bloqueado a este usuario, así que no tienes nada más que hacer.\n\n¡Gracias por ayudar a mantener Mastodon un lugar seguro para todos!</string>
|
||||
<string name="blocked_user">Bloqueado %s</string>
|
||||
<string name="mark_all_notifications_read">Marcar todo como leído</string>
|
||||
<string name="settings_display">Visualización</string>
|
||||
<string name="settings_filters">Filtros</string>
|
||||
<string name="settings_server_explanation">Resumen, reglas, moderadores</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">Acerca de %s</string>
|
||||
<string name="default_post_language">Idioma predeterminado de la publicación</string>
|
||||
<string name="settings_alt_text_reminders">Añadir recordatorios de texto alt</string>
|
||||
<string name="settings_confirm_unfollow">Preguntar antes de dejar de seguir a alguien</string>
|
||||
<string name="settings_confirm_boost">Preguntar antes de impulsar</string>
|
||||
<string name="settings_confirm_delete_post">Preguntar antes de eliminar mensajes</string>
|
||||
<string name="pause_all_notifications">Pausar todo</string>
|
||||
<string name="pause_notifications_off">Apagado</string>
|
||||
<string name="notifications_policy_anyone">Cualquiera</string>
|
||||
<string name="notifications_policy_followed">Personas que te siguen</string>
|
||||
<string name="notifications_policy_follower">Personas que sigues</string>
|
||||
<string name="notifications_policy_no_one">Nadie</string>
|
||||
<string name="settings_notifications_policy">Recibir notificaciones de</string>
|
||||
<string name="notification_type_mentions_and_replies">Menciones y respuestas</string>
|
||||
<string name="pause_all_notifications_title">Pausar todas las notificaciones</string>
|
||||
<plurals name="x_weeks">
|
||||
<item quantity="one">%d semana</item>
|
||||
<item quantity="other">%d semanas</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 en %2$s</string>
|
||||
<string name="today">hoy</string>
|
||||
<string name="yesterday">ayer</string>
|
||||
<string name="tomorrow">mañana</string>
|
||||
<!-- %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">Las notificaciones se reanudarán %s.</string>
|
||||
<string name="resume_notifications_now">Reanudar ahora</string>
|
||||
<string name="open_system_notification_settings">Ir a la configuración de notificaciones</string>
|
||||
<string name="about_server">Acerca de</string>
|
||||
<string name="server_rules">Reglas</string>
|
||||
<string name="server_administrator">Administrador</string>
|
||||
<string name="notifications_disabled_in_system">Active las notificaciones desde la configuración de su dispositivo para ver actualizaciones desde cualquier lugar.</string>
|
||||
<string name="settings_even_more">Aún más ajustes</string>
|
||||
<string name="settings_show_cws">Mostrar advertencias de contenido</string>
|
||||
<plurals name="in_x_seconds">
|
||||
<item quantity="one">en %d segundo</item>
|
||||
<item quantity="other">en %d segundos</item>
|
||||
</plurals>
|
||||
<plurals name="in_x_minutes">
|
||||
<item quantity="one">en %d minuto</item>
|
||||
<item quantity="other">en %d minutos</item>
|
||||
</plurals>
|
||||
<plurals name="in_x_hours">
|
||||
<item quantity="one">en %d hora</item>
|
||||
<item quantity="other">en %d horas</item>
|
||||
</plurals>
|
||||
<plurals name="x_hours_ago">
|
||||
<item quantity="one">hace %d hora</item>
|
||||
<item quantity="other">hace %d horas</item>
|
||||
</plurals>
|
||||
<string name="alt_text_reminder_title">Falta el texto alt de los medios</string>
|
||||
<plurals name="alt_text_reminder_x_images">
|
||||
<item quantity="one">%s de tus imágenes no tiene texto alternativo. ¿Publicar de todos modos?</item>
|
||||
<item quantity="other">%s de tus imágenes no tienen texto alternativo. ¿Publicar de todos modos?</item>
|
||||
</plurals>
|
||||
<plurals name="alt_text_reminder_x_attachments">
|
||||
<item quantity="one">%s de tus archivos adjuntos multimedia carece de texto alternativo. ¿Publicar de todos modos?</item>
|
||||
<item quantity="other">%s de tus archivos adjuntos no tienen texto alternativo. ¿Publicar de todos modos?</item>
|
||||
</plurals>
|
||||
<string name="count_one">Uno</string>
|
||||
<string name="count_two">Dos</string>
|
||||
<string name="count_three">Tres</string>
|
||||
<string name="count_four">Cuatro</string>
|
||||
<string name="alt_text_reminder_post_anyway">Publicar</string>
|
||||
<!-- %s is the username -->
|
||||
<string name="unfollow_confirmation">¿Dejar de seguir a %s?</string>
|
||||
<string name="filter_active">Activo</string>
|
||||
<string name="filter_inactive">Inactivo</string>
|
||||
<string name="settings_add_filter">Añadir filtro</string>
|
||||
<string name="settings_edit_filter">Editar filtro</string>
|
||||
<string name="settings_filter_duration">Duración</string>
|
||||
<string name="settings_filter_muted_words">Palabras silenciadas</string>
|
||||
<string name="settings_filter_context">Silenciar de</string>
|
||||
<string name="settings_filter_show_cw">Mostrar con advertencia de contenido</string>
|
||||
<string name="settings_filter_show_cw_explanation">Sigue mostrando mensajes que coinciden con este filtro, pero detrás de una advertencia de contenido</string>
|
||||
<string name="settings_delete_filter">Eliminar filtro</string>
|
||||
<string name="filter_duration_forever">Siempre</string>
|
||||
<!-- %s is the timestamp ("tomorrow at 12:34") -->
|
||||
<string name="settings_filter_ends">Termina %s</string>
|
||||
<plurals name="settings_x_muted_words">
|
||||
<item quantity="one">%d palabra o frase silenciada</item>
|
||||
<item quantity="other">%d palabras o frases silenciadas</item>
|
||||
</plurals>
|
||||
<string name="selection_2_options">%1$s y %2$s</string>
|
||||
<string name="selection_3_options">%1$s, %2$s, y %3$s</string>
|
||||
<string name="selection_4_or_more">%1$s, %2$s, y %3$d más</string>
|
||||
<string name="filter_context_home_lists">Inicio y listas</string>
|
||||
<string name="filter_context_notifications">Notificaciones</string>
|
||||
<string name="filter_context_threads_replies">Hilos y respuestas</string>
|
||||
<string name="filter_context_profiles">Profiles</string>
|
||||
<string name="settings_filter_title">Título</string>
|
||||
<string name="settings_delete_filter_title">¿Eliminar filtro “%s”?</string>
|
||||
<string name="settings_delete_filter_confirmation">Este filtro se eliminará de su cuenta en todos sus dispositivos.</string>
|
||||
<string name="add_muted_word">Añadir palabra silenciada</string>
|
||||
<string name="edit_muted_word">Editar palabra silenciada</string>
|
||||
<string name="add">Añadir</string>
|
||||
<string name="filter_word_or_phrase">Palabra o frase</string>
|
||||
<string name="settings_delete_filter_word">¿Eliminar palabra “%s”?</string>
|
||||
<string name="enter_selection_mode">Seleccionar</string>
|
||||
<string name="select_all">Seleccionar todo</string>
|
||||
<string name="settings_filter_duration_title">Duración del filtro</string>
|
||||
<string name="filter_duration_custom">Personalizado</string>
|
||||
<plurals name="settings_delete_x_filter_words">
|
||||
<item quantity="one">¿Eliminar palabra %d?</item>
|
||||
<item quantity="other">¿Eliminar palabras %d?</item>
|
||||
</plurals>
|
||||
<plurals name="x_items_selected">
|
||||
<item quantity="one">%d seleccionado</item>
|
||||
<item quantity="other">%d seleccionados</item>
|
||||
</plurals>
|
||||
<string name="required_form_field_blank">No puede estar en blanco</string>
|
||||
<string name="filter_word_already_in_list">Ya está en la lista</string>
|
||||
<string name="app_update_ready">Actualización de aplicación lista</string>
|
||||
<string name="app_update_version">Versión %s</string>
|
||||
<string name="downloading_update">Descargando (%d%%)</string>
|
||||
<!-- Shown like a content warning, %s is the name of the filter -->
|
||||
<string name="post_matches_filter_x">Coincide con el filtro “%s”</string>
|
||||
<string name="search_mastodon">Buscar en Mastodon</string>
|
||||
<string name="clear_all">Limpiar todo</string>
|
||||
<string name="search_open_url">Abrir URL en Mastodon</string>
|
||||
<string name="posts_matching_hashtag">Publicaciones con “%s”</string>
|
||||
<string name="search_go_to_account">Ir a %s</string>
|
||||
<string name="posts_matching_string">Publicaciones con “%s”</string>
|
||||
<string name="accounts_matching_string">Personas con “%s”</string>
|
||||
<!-- Shown in the post header. Please keep it short -->
|
||||
<string name="time_seconds_ago_short">hace %ds</string>
|
||||
<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>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user