From f886e4c1d2c6a4930f941098b6ef0a08432505b8 Mon Sep 17 00:00:00 2001 From: Grishka Date: Sat, 9 Sep 2023 03:39:27 +0300 Subject: [PATCH 001/127] Fix #658, fix #620 --- .../android/api/requests/filters/FilterRequest.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mastodon/src/main/java/org/joinmastodon/android/api/requests/filters/FilterRequest.java b/mastodon/src/main/java/org/joinmastodon/android/api/requests/filters/FilterRequest.java index ff61d536f7..9d5856a16b 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/api/requests/filters/FilterRequest.java +++ b/mastodon/src/main/java/org/joinmastodon/android/api/requests/filters/FilterRequest.java @@ -6,6 +6,9 @@ import java.util.EnumSet; import java.util.List; +import androidx.annotation.Keep; + +@Keep class FilterRequest{ public String title; public EnumSet context; From ab457035ff315b3474aa8b958c40c3ac782cb433 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sat, 9 Sep 2023 08:34:27 +0200 Subject: [PATCH 002/127] New translations strings.xml (Finnish) --- mastodon/src/main/res/values-fi-rFI/strings.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mastodon/src/main/res/values-fi-rFI/strings.xml b/mastodon/src/main/res/values-fi-rFI/strings.xml index 7f56a49ded..2d42d9ee45 100644 --- a/mastodon/src/main/res/values-fi-rFI/strings.xml +++ b/mastodon/src/main/res/values-fi-rFI/strings.xml @@ -3,8 +3,11 @@ Kirjaudu sisään Seuraava Virhe + Ilmoitukset + %s seurasi sinua Jaa Asetukset + Julkaise Muokkaa profiilia Valmis Tallennetaan… From a770828165f91b0578079a5fc6ba58c57bc1731e Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sat, 9 Sep 2023 11:09:40 +0200 Subject: [PATCH 003/127] New translations strings.xml (Finnish) --- .../src/main/res/values-fi-rFI/strings.xml | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/mastodon/src/main/res/values-fi-rFI/strings.xml b/mastodon/src/main/res/values-fi-rFI/strings.xml index 2d42d9ee45..72a787cabb 100644 --- a/mastodon/src/main/res/values-fi-rFI/strings.xml +++ b/mastodon/src/main/res/values-fi-rFI/strings.xml @@ -2,13 +2,49 @@ Kirjaudu sisään Seuraava + Haetaan palvelimen tietoja… Virhe + %s ei näytä olevan Mastodonin palvelin. + OK + Valmistellaan todennusta… + Viimeistellään todennusta… + %s tehosti + Vastauksessa %s Ilmoitukset %s seurasi sinua + %s lähetti sinulle seurauspyynnön + %s tykkäsi julkaisustasi + %s tehosti viestiäsi + Katso tulokset äänestyksestä johon osallistuit Jaa Asetukset Julkaise + Hylkää luonnos? + Hylkää + Kumoa + + seuraaja + seuraajat + + + seurataan + seurataan + + Viestit + Viestit ja vastaukset + Media + Tietoja + Seuraa + Seurataan Muokkaa profiilia + Jaa profiili + Mykistä %s + Poista mykistys tililtä %s + Estä %s + Poista käyttäjän %s esto + Raportoi %s + Estä %s + Poista käyttäjän %s esto Valmis Tallennetaan… Takaisin From 9bd8aff99b6f96a5dd97ca246bc33903f2af0a0b Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sat, 9 Sep 2023 12:08:15 +0200 Subject: [PATCH 004/127] New translations strings.xml (Finnish) --- .../src/main/res/values-fi-rFI/strings.xml | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/mastodon/src/main/res/values-fi-rFI/strings.xml b/mastodon/src/main/res/values-fi-rFI/strings.xml index 72a787cabb..d9dc47b5a9 100644 --- a/mastodon/src/main/res/values-fi-rFI/strings.xml +++ b/mastodon/src/main/res/values-fi-rFI/strings.xml @@ -45,8 +45,34 @@ Raportoi %s Estä %s Poista käyttäjän %s esto + Liittynyt Valmis + Ladataan… + Nimi + Sisältö Tallennetaan… + Julkaisu tililtä %s + Vaihtoehto %d + + %d minuutti + %d minuuttia + + + %d tunti + %d tuntia + + + %d päivä + %d päivää + + + %d sekunti jäljellä + %d sekunttia jäljellä + + + %d minuutti jäljellä + %d minuuttia jäljellä + Takaisin Akateeminen Aktivismi From 81cbc2d10c1f28601e1ddbd394d8e5d39f38f305 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sat, 9 Sep 2023 15:40:28 +0200 Subject: [PATCH 005/127] New translations strings.xml (Ukrainian) --- mastodon/src/main/res/values-uk-rUA/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/mastodon/src/main/res/values-uk-rUA/strings.xml b/mastodon/src/main/res/values-uk-rUA/strings.xml index ed56e0aa68..805f7d93f5 100644 --- a/mastodon/src/main/res/values-uk-rUA/strings.xml +++ b/mastodon/src/main/res/values-uk-rUA/strings.xml @@ -425,6 +425,7 @@ Вітаємо у Mastodon Mastodon - це децентралізована соціальна мережа, тобто жодна компанія не контролює її. Вона складається з багатьох незалежних серверів, які з\'єднані між собою. Що таке сервери? + Кожен обліковий запис Mastodon розміщений на сервері - кожен сервер має свої цінності, правила, й & адмінів. Немає різниці, який ви оберете, ви зможете підписуватися та спілкуватися з користувачами з будь-якого. Відкриття посилання… Це посилання не підтримується застосунком Вийти з усіх акаунтів From 167a14b8dbe0a3b1a161995ad7129147d2e97b50 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sat, 9 Sep 2023 19:29:29 +0200 Subject: [PATCH 006/127] New translations strings.xml (Finnish) --- .../src/main/res/values-fi-rFI/strings.xml | 127 ++++++++++++++++++ 1 file changed, 127 insertions(+) diff --git a/mastodon/src/main/res/values-fi-rFI/strings.xml b/mastodon/src/main/res/values-fi-rFI/strings.xml index d9dc47b5a9..13a0ca5eb8 100644 --- a/mastodon/src/main/res/values-fi-rFI/strings.xml +++ b/mastodon/src/main/res/values-fi-rFI/strings.xml @@ -73,7 +73,92 @@ %d minuutti jäljellä %d minuuttia jäljellä + + %d tunti jäljellä + %d tuntia jäljellä + + + %d päivä jäljellä + %d päivää jäljellä + + + %d ääni + %d ääntä + + Suljettu + Mykistä tili + Vahvista käyttäjän %s mykistys + Mykistä + Poista tilin mykistys + Vahvista, että haluat poistaa mykistyksen tililtä %s + Poista mykistys + Estä tili + Estä verkkotunnus + Vahvista käyttäjän %s esto + Estä + Poista tilin esto + Poista verkkotunnuksen esto + Vahvista, että haluat poistaa tilin %s eston + Poista esto + Estetty + Äänestä + Poista + Poista julkaisu + Haluatko varmasti poistaa tämän julkaisun? + Poistetaan… + Äänen toisto + Toista + Tauko + Kirjaudu ulos + Lisää tili + Haku + Aihetunnisteet + Uutiset + Sinulle + Kaikki + Maininnat + + %d henkilö puhuu + %d henkilöä puhuu + + Raportoi %s + Mikä on väärin tässä julkaisussa? + Mikä on vialla käyttäjässä %s? + Valitse se, mikä sopii parhaiten + En pidä siitä + Tätä ei halua nähdä + Se on roskapostia + Haitalliset linkit, väärennetyt sitoutumiset tai toistuvat vastaukset + Se rikkoo palvelimen sääntöjä + Tiedät, että se rikkoo tiettyjä sääntöjä + Jotain muuta + Ongelma ei sovi muihin kategorioihin + Mitä sääntöjä rikotaan? + Valitse kaikki sopivat + Onko julkaisuja, jotka tukevat tätä raporttia? + Valitse kaikki sopivat + Olisiko jotain muuta, mitä meidän pitäisi tietää? + Lisäkommentit + Lähetetään raporttia… + Kiitos raportista, tutkimme asiaa. + Sillä välin kun tarkistamme tätä, voit ryhtyä toimenpiteisiin käyttäjää @%s vastaan: + Lopeta käyttäjän %s seuraaminen + Lopeta seuraaminen + Et näe hänen viestejään. Hän voi silti seurata sinua ja nähdä viestisi. Hän ei tiedä, että on mykistetty. + Et näe hänen viestejään, eikä hän voi nähdä viestejäsi tai seurata sinua. Hän näkevät, että olet estänyt hänet. + Etkö halua nähdä tätä? + Tässä on vaihtoehtosi hallita näkemääsi Mastodonissa: Takaisin + Palvelimen nimi tai URL-osoite + Palvelimen säännöt + Jatkamalla sitoudut noudattamaan seuraavia sääntöjä, jotka %s moderaattorit ovat asettaneet ja valvoneet. + Luo tili + Nimi + Käyttäjätunnus + Sähköposti + Salasana + Vahvista salasana + Sisällytä suuraakkoset, erikoismerkit, ja numerot, jotta voit lisätä salasanan voimaa. Akateeminen Aktivismi Kaikki @@ -87,10 +172,48 @@ Musiikki Alueellinen Teknologia + Tarkista sähköpostisi + Napauta lähettämäämme linkkiä vahvistaaksesi tunnuksen %s. Odotamme täällä. + Etkö saanut linkkiä? + Lähetä uudelleen + Avaa sähköpostiohjelma + Vahvistusviesti lähetetty + Kirjoita tai liitä mitä mietit + Sisältövaroitus Tallenna + Lisää selitys + Julkinen + Vain seuraajat + Vain mainitsemani tilit + Viimeisimmät + Ohita + Uudet seuraajat + Suosikit + Tehostukset + Maininnat + Kyselyt + Valitse tili + Kirjaudu ensin Mastodoniin + + Et voi lisätä enempää kuin %d medialiitteen + Et voi lisätä enempää kuin %d medialiitettä + + Tiedosto %s on tyyppiä jota ei tueta + Tiedosto %1$s ylittää %2$s MB kokorajan + Ulkoasu + Käytä laitteen ulkoasua Vaalea Tumma + Toiminnot + Toista animoidut käyttäjäkuvat ja emojit + Käytä sovelluksen sisäistä selainta + Ilmoitukset + Osallistu Mastodoniin + Käyttöehdot + Tietosuojakäytäntö + Tyhjennä median välimuisti + Mastodon Android v%1$s (%2$d) Vastaa Jaa Emoji @@ -105,6 +228,10 @@ Seuraa takaisin + Tekstiä muokattu + Sisältövaroitus + Sisältövaroitus muokattu + Sisältövaroitus poistettu From 0f803cd4fae1aa3bf832285e9b35b5b5b4eecd50 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sat, 9 Sep 2023 20:30:25 +0200 Subject: [PATCH 007/127] New translations strings.xml (Finnish) --- .../src/main/res/values-fi-rFI/strings.xml | 283 ++++++++++++++++++ 1 file changed, 283 insertions(+) diff --git a/mastodon/src/main/res/values-fi-rFI/strings.xml b/mastodon/src/main/res/values-fi-rFI/strings.xml index 13a0ca5eb8..5f60e866a0 100644 --- a/mastodon/src/main/res/values-fi-rFI/strings.xml +++ b/mastodon/src/main/res/values-fi-rFI/strings.xml @@ -45,6 +45,10 @@ Raportoi %s Estä %s Poista käyttäjän %s esto + + %,d julkaisu + %,d julkaisua + Liittynyt Valmis Ladataan… @@ -214,39 +218,318 @@ Tietosuojakäytäntö Tyhjennä median välimuisti Mastodon Android v%1$s (%2$d) + Median välimuisti tyhjennetty + Kirjaudu ulos %s? + Kirjoittaja merkitsi tämän median arkaluontoiseksi. + Avaa profiili %s + Lisää asetuksia + Uusi julkaisu Vastaa + Tehosta + Suosikki Jaa + Kuva ilma kuvausta + Lisää mediatiedosto + Lisää kysely Emoji + Kotiaikajana + Oma profiili + Median katselin Follow %s + Käyttäjän %s seuraaminen lopetettu + Seuraat nyt käyttäjää %s + Käyttäjän %s seuraamista pyydetty Avaa selaimessa + Piilota käyttäjän @%s tehostukset + Näytä tehostukset käyttäjältä @%s + Miksi haluat liittyä? + Tämä auttaa meitä arvioimaan hakemustasi. Tyhjennä + Otsikon kuva Profiilikuva + Järjestä uudelleen Lataa + Käyttöoikeus vaaditaan + Sovellus tarvitsee pääsyn tallennustilaan, jotta voit tallentaa tämän tiedoston. Avaa asetukset + Virhe tallennettaessa tiedostoa Tiedosto tallennettu Ladataan… + Tätä toimintoa käsittelevää sovellusta ei ole + Paikallinen + Nämä julkaisut ovat saamassa vetoa eri puolilla Mastodonia. + Näistä uutisista puhutaan Mastodonissa. + Nämä ovat viestit kaikilta palvelimesi (%s) käyttäjiltä. + Muiden seuraamiesi perusteella saattaisit pitää näistä tileistä. + Uusia julkaisuja + Lataa puuttuvat julkaisut Seuraa takaisin + Pyydetty + Seuraa sinua + Hyväksyy seuraajat käsin + + %d seuraaja + %d seuraajaa + + + %d seurattu + %d seurattua + + + %,d suosikki + %,d suosikkia + + + %,d tehostus + %,tehostusta + + %1$s sovelluksella %2$s + nyt + Muokkaushistoria + Muokattiin viimeksi %s + juuri nyt + + %d sekunti sitten + %d sekuntia sitten + + + %d minuutti sitten + %d minuuttia sitten + + muokattu %s + Alkuperäinen viesti Tekstiä muokattu Sisältövaroitus Sisältövaroitus muokattu Sisältövaroitus poistettu + Kysely lisätty + Kyselyä muokattu + Kysely poistettu + Mediatiedosto lisätty + Mediatiedosto poistettu + Mediatiedostoja järjestetty + Merkitty arkaluontoiseksi + Merkitty ei arkaluontoiseksi + Julkaisu muokattu + Muokkaa + Hylätäänkö muutokset? + Lataus epäonnistui + %d tavua + %.2f KB + %.2f MB + %.2f GB + Käsitellään… + Lataa (%s) + Asenna + Yksityisyytesi + Vaikka Mastodon-sovellus ei kerää mitään tietoja, palvelimella, jonka olet rekisteröitynyt, voi olla eri käytäntö.\n\nJos olet eri mieltä käytännöstä %s, voit palata ja valita eri palvelin. + Hyväksyn + Luettelo on tyhjä + Tämä palvelin ei hyväksy uusia rekisteröintejä. + Kopioitu leikepöydälle + Kirjanmerkki + Poista kirjanmerkki + Kirjanmerkit + Omat suosikit + Tervetuloa takaisin + Kirjaudu sisään palvelimella, jossa olet luonut tilisi. + Palvelimen URL-osoite + Palvelin valitaan kielesi perusteella, jos jatkat ilman valintaa. + Millä tahansa kielellä + Välitön rekisteröityminen + Manuaalinen hyväksyntä + Mikä tahansa rekisteröintinopeus + Eurooppa + Pohjois-Amerikka + Etelä-Amerikka + Afrikka + Aasia + Oseania + Ei hyväksy uusia jäseniä + Erityiset Kiinnostukset + Salasanat eivät täsmää + Valitse minulle + Lisää rivi + Profiilin asetukset + Voit myös täyttää tämän myöhemmin Profiili-välilehdellä. + Voit lisätä enintään neljä profiilikenttää joissa on mitä haluat. Sijainti, linkit, pronominit — taivas on rajana. + Suosittua Mastodonissa + Seuraa kaikkia + Eri mieltä + TL;DR: Emme kerää tai käsittele mitään. + Eri mieltä tästä %s + Kuvaus + Kyselyn tyyli + Selitys + Ohje + Mikä on selitys? + Kuvaselitys auttaa ihmisiä, joilla on näkövamma, hidas yhteys, tai jotka tarvitsevat lisäkontekstia. \n\nVoit parantaa saavutettavuutta ja kaikkien mahdollisuutta ymmärtää kirjoittamalla selkeän, lyhyen ja objektiivisen selityksen. \n\n
  • Mainitse tärkeät elementit
  • \n
  • Anna tiivistelmä kuvissa olevista teksteistä
  • \n
  • Käytä normaalia lauserakennetta
  • \n
  • Vältä turhaa toistoa
  • \n
  • Keskity monimutkaisissa kuvioissa (kuten kartoissa ja taulukoissa) trendeihin ja tärkeimpiin tietoihin
+ Muokkaa julkaisua + Ei todennettua linkkiä + Selaa emojeita + Löydä etsimäsi henkilöt + Näille hakusanoille ei löytynyt mitään + Kieli + Oletus + Järjestelmä + Tunnista kieli + Ei voi tunnistaa kieltä + Tunnistettu + Media piilotettu + Julkaisu piilotettu + Raportoi julkaisu + Tämä tili on toisella palvelimella. Haluatko lähettää nimettömän raportin myös sinne? + Välitä kohteeseen %s + Raportoitu + Jos et enää halua nähdä tämän käyttäjän julkaisuja kotiaikajanallasi, lopeta seuraaminen. + Käyttäjä %s mykistetty + Olet jo estänyt tämän käyttäjän, sinun ei tarvitse tehdä muuta sillä aikaa kun tarkastamme raporttisi. + Olet jo estänyt tämän käyttäjän, joten sinun ei tarvitse tehdä mitään muuta.\n\nKiitos, että autat pitämään Mastodonin turvallisena paikkana kaikille! + Estetty %s + Merkitse kaikki luetuksi + Näyttö + Suodattimet + Yleiskatsaus, säännöt, valvojat + Tietoa: %s + Julkaisun oletuskieli + Lisää muistutus kuvaselityksestä + Kysy ennen kuin käyttäjän seuraaminen lopetetaan + Kysy ennen tehostusta + Kysy ennen julkaisujen poistamista + Keskeytä kaikki + Pois Päältä + Kuka tahansa + Seuraajasi + Seuraamasi henkilöt + Ei kukaan + Ota vastaan ilmoituksia käyttäjältä + Maininnat ja vastaukset + Keskeytä kaikki ilmoitukset + + %d viikko + %d viikkoa + + %1$s klo %2$s + tänään + eilen + Ylläpitäjä + Viestin ylläpitäjä + Ota ilmoitukset käyttöön laitteesi asetuksista nähdäksesi päivityksiä mistä tahansa. + Vielä enemmän asetuksia + Näytä sisältövaroitukset + Piilota arkaluontoiseksi merkitty media + Näytä reaktiolaskurit + Mukautetut emojit näyttönimissä + + %d sekunnin kuluttua + %d sekunnin kuluttua + + + %d minuutin kuluttua + %d minuutin kuluttua + + + %d tunnin kuluttua + %d tunnin kuluttua + + + %d tunti sitten + %d tuntia sitten + + Mediasta puuttuu selitysteksti + + %s kuvastasi puuttuu selitysteksti. Julkaistaanko silti? + %s kuvastasi puuttuu selitysteksti. Julkaistaanko silti? + + + %s mediatiedostostasi puuttuu selitysteksti. Julkaistaanko silti? + %s mediatiedostostasi puuttuu selitysteksti. Julkaistaanko silti? + + Yksi + Kaksi + Kolme + Neljä + Julkaise + Lopeta käyttäjän %s seuraaminen? + Aktiivinen + Ei käytössä + Lisää suodatin + Muokkaa suodatinta + Kesto + Mykistetyt sanat + Mykistä alkaen + Näytä sisältövaroituksella + Näytä vielä viestejä, jotka täsmäävät tähän suodattimeen, mutta sisällönvaroituksen takana + Poista suodatin + Ikuisesti + Päättyy %s + + %d mykistetty sana tai lause + %d mykistettyä sanaa tai lauseita + + %1$s ja %2$s + %1$s, %2$s ja %3$s + %1$s, %2$s, ja %3$d lisää + Koti & listat + Ilmoitukset + Julkiset aikajanat + Langat & vastaukset + Profiilit + Otsikko + Poistetaanko suodatin “%s”? + Tämä suodatin poistetaan tililtäsi kaikissa laitteissa. + Lisää mykistetty sana + Muokkaa mykistettyä sanaa + Lisää + Sana tai lause + Sanat ovat tapauskohtaisia ja vastaavat vain kokonaisia sanoja.\n\nJos suodattaa avainsana “Apple”, se piilottaa viestit sisältävät “omena” tai “aPPLe” mutta ei “ananas\". + Poista sana “%s”? + Valitse + Valitse kaikki + Suodattimen kesto + Mukautettu + + Poista %d sana? + Poista %d sanaa? + + + %d valittu + %d valittu + + Tätä ei voi jättää tyhjäksi + Jo luettelossa + Sovelluksen päivitys valmis + Versio %s + Ladataan (%d%%) + Sopii suodattimeen ”%s” + Etsi Mastodonista + Tyhjennä kaikki + Avaa URL-osoite Mastodonissa + Julkaisut joissa on \"%s\" + Siirry tiliin %s + Julkaisut joissa on \"%s\" + Henkilöt jossa on \"%s\" + %ds sitten + %dm sitten + %dh sitten + %dd sitten
From b396ee79879e4af1531fb381e3bd04ecba2cbff7 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sun, 10 Sep 2023 15:07:27 +0200 Subject: [PATCH 008/127] New translations strings.xml (Indonesian) --- mastodon/src/main/res/values-in-rID/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/mastodon/src/main/res/values-in-rID/strings.xml b/mastodon/src/main/res/values-in-rID/strings.xml index 738b809e6b..ca344e1698 100644 --- a/mastodon/src/main/res/values-in-rID/strings.xml +++ b/mastodon/src/main/res/values-in-rID/strings.xml @@ -368,6 +368,7 @@ Selamat datang di Mastodon Mastodon adalah jejaring sosial terdesentralisasi, tidak ada satu pun perusahaan yang mengontrol. Semua dijalankan oleh server independen, terkoneksi bersama. Apa itu server? + Semua akun Mastodon berada pada sebuah server — dengan nilai, aturan, & admin masing-masing. Mana pun yang Anda pilih, Anda dapat mengikuti dan berinteraksi dengan server mana pun. Membuka tautan… Tautan ini tidak didukung dalam aplikasi Keluar dari semua akun From 971c4e587935e4fb3ad5ea2ce9774c333a55e6c1 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 11 Sep 2023 19:00:28 +0200 Subject: [PATCH 009/127] New translations strings.xml (Finnish) --- mastodon/src/main/res/values-fi-rFI/strings.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/mastodon/src/main/res/values-fi-rFI/strings.xml b/mastodon/src/main/res/values-fi-rFI/strings.xml index 5f60e866a0..56f9170944 100644 --- a/mastodon/src/main/res/values-fi-rFI/strings.xml +++ b/mastodon/src/main/res/values-fi-rFI/strings.xml @@ -366,7 +366,13 @@ Eri mieltä tästä %s Kuvaus + Seurataan käyttäjiä… + %1$s ei salli ilmoittautumisia osoitteesta %2$s. Kokeile toista osoitetta tai <a>valitse toinen palvelin</a>. + Näytä joka tapauksessa + Piilota uudelleen + Valitse yksi tai useampi + Tallenna muutokset Kyselyn tyyli Selitys From 2998ee91456c5de7c4a54b0453e74cadc0c7ec34 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 11 Sep 2023 20:09:41 +0200 Subject: [PATCH 010/127] New translations strings.xml (Finnish) --- mastodon/src/main/res/values-fi-rFI/strings.xml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/mastodon/src/main/res/values-fi-rFI/strings.xml b/mastodon/src/main/res/values-fi-rFI/strings.xml index 56f9170944..0a322ff946 100644 --- a/mastodon/src/main/res/values-fi-rFI/strings.xml +++ b/mastodon/src/main/res/values-fi-rFI/strings.xml @@ -373,6 +373,18 @@ Piilota uudelleen Valitse yksi tai useampi Tallenna muutokset + Suositellut + Aikajana + Näytä kaikki + Tilit + Vahvistettu linkki + Näytä + Piilota + Liity palvelimelle %s + Valitse toinen palvelin + tai + Lue lisää + Tervetuloa Mastodoniin Kyselyn tyyli Selitys From fc831e7d42a7e8bf5937f0023ab824e75f43d1f8 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 11 Sep 2023 22:36:20 +0200 Subject: [PATCH 011/127] New translations strings.xml (Portuguese, Brazilian) --- mastodon/src/main/res/values-pt-rBR/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mastodon/src/main/res/values-pt-rBR/strings.xml b/mastodon/src/main/res/values-pt-rBR/strings.xml index afc5bb99ff..62a90cd667 100644 --- a/mastodon/src/main/res/values-pt-rBR/strings.xml +++ b/mastodon/src/main/res/values-pt-rBR/strings.xml @@ -8,7 +8,7 @@ OK Preparando para autenticação… Finalizando autenticação… - %s impulsionado + %s impulsionou Em resposta à %s Notificações %s seguiu você From fadc42d72b529f7a948841454336a8e2d0db9efe Mon Sep 17 00:00:00 2001 From: Grishka Date: Tue, 12 Sep 2023 02:32:23 +0300 Subject: [PATCH 012/127] New version --- mastodon/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mastodon/build.gradle b/mastodon/build.gradle index 43e8edcd97..9e81461d31 100644 --- a/mastodon/build.gradle +++ b/mastodon/build.gradle @@ -9,8 +9,8 @@ android { applicationId "org.joinmastodon.android" minSdk 23 targetSdk 33 - versionCode 63 - versionName "2.0.3" + versionCode 64 + versionName "2.0.4" 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" } From 1b4dc01c74e3db80051da24aa0e4ebc4f8cd571d Mon Sep 17 00:00:00 2001 From: Grishka Date: Tue, 12 Sep 2023 06:00:40 +0300 Subject: [PATCH 013/127] Post translation closes #267, closes #671, closes #502 --- .../requests/statuses/TranslateStatus.java | 13 +++ .../fragments/BaseStatusListFragment.java | 55 +++++++++++++ .../joinmastodon/android/model/Status.java | 18 +++++ .../android/model/Translation.java | 10 +++ .../displayitems/HeaderStatusDisplayItem.java | 12 +++ .../displayitems/TextStatusDisplayItem.java | 79 ++++++++++++++++++- .../src/main/res/layout/display_item_text.xml | 13 ++- .../res/layout/footer_text_translation.xml | 44 +++++++++++ mastodon/src/main/res/menu/post.xml | 2 +- mastodon/src/main/res/values/strings.xml | 7 ++ 10 files changed, 246 insertions(+), 7 deletions(-) create mode 100644 mastodon/src/main/java/org/joinmastodon/android/api/requests/statuses/TranslateStatus.java create mode 100644 mastodon/src/main/java/org/joinmastodon/android/model/Translation.java create mode 100644 mastodon/src/main/res/layout/footer_text_translation.xml diff --git a/mastodon/src/main/java/org/joinmastodon/android/api/requests/statuses/TranslateStatus.java b/mastodon/src/main/java/org/joinmastodon/android/api/requests/statuses/TranslateStatus.java new file mode 100644 index 0000000000..8810362721 --- /dev/null +++ b/mastodon/src/main/java/org/joinmastodon/android/api/requests/statuses/TranslateStatus.java @@ -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{ + public TranslateStatus(String id, String lang){ + super(HttpMethod.POST, "/statuses/"+id+"/translate", Translation.class); + setRequestBody(Map.of("lang", lang)); + } +} diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java index a9152c67bd..c141029a54 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java @@ -17,13 +17,16 @@ 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.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.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,56 @@ public TypedObjectPool { + 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; + 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){ diff --git a/mastodon/src/main/java/org/joinmastodon/android/model/Status.java b/mastodon/src/main/java/org/joinmastodon/android/model/Status.java index fcfcb8c1d3..caeba6bb80 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/model/Status.java +++ b/mastodon/src/main/java/org/joinmastodon/android/model/Status.java @@ -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 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 String getStrippedText(){ 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 + } } diff --git a/mastodon/src/main/java/org/joinmastodon/android/model/Translation.java b/mastodon/src/main/java/org/joinmastodon/android/model/Translation.java new file mode 100644 index 0000000000..68487451d7 --- /dev/null +++ b/mastodon/src/main/java/org/joinmastodon/android/model/Translation.java @@ -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; +} diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java index f8055c2269..b355b04f8b 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java @@ -41,6 +41,7 @@ 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 void onError(ErrorResponse error){ AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setBookmarked(item.status, !item.status.bookmarked); }else if(id==R.id.share){ UiUtils.openSystemShareSheet(activity, item.status.url); + }else if(id==R.id.translate){ + item.parentFragment.togglePostTranslation(item.status, item.parentID); } return true; }); @@ -285,6 +288,15 @@ private void updateOptionsMenu(){ 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); diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/TextStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/TextStatusDisplayItem.java index 6a413bbc1e..d9a0a7e005 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/TextStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/TextStatusDisplayItem.java @@ -3,15 +3,24 @@ 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 @@ 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 Type getType(){ @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 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 void clearImage(int index){ 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); + } + } + } } } diff --git a/mastodon/src/main/res/layout/display_item_text.xml b/mastodon/src/main/res/layout/display_item_text.xml index 4620043f1c..db9ece18e2 100644 --- a/mastodon/src/main/res/layout/display_item_text.xml +++ b/mastodon/src/main/res/layout/display_item_text.xml @@ -1,8 +1,9 @@ - + android:layout_height="wrap_content" + android:orientation="vertical"> - \ No newline at end of file + + + \ No newline at end of file diff --git a/mastodon/src/main/res/layout/footer_text_translation.xml b/mastodon/src/main/res/layout/footer_text_translation.xml new file mode 100644 index 0000000000..b80e730f81 --- /dev/null +++ b/mastodon/src/main/res/layout/footer_text_translation.xml @@ -0,0 +1,44 @@ + + + + + + + + + +