From 33b8a539b7dc3dceb8b45cef143f1ccefef2edc2 Mon Sep 17 00:00:00 2001 From: Chee Aun Date: Mon, 23 Jun 2025 05:32:02 +0800 Subject: [PATCH 01/32] i18n updates (pl-PL) (#1209) --- src/locales/pl-PL.po | 136 +++++++++++++++++++++---------------------- 1 file changed, 68 insertions(+), 68 deletions(-) diff --git a/src/locales/pl-PL.po b/src/locales/pl-PL.po index a99ad01bf7..8090eddfa9 100644 --- a/src/locales/pl-PL.po +++ b/src/locales/pl-PL.po @@ -8,7 +8,7 @@ msgstr "" "Language: pl\n" "Project-Id-Version: phanpy\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2025-06-20 01:13\n" +"PO-Revision-Date: 2025-06-22 21:31\n" "Last-Translator: \n" "Language-Team: Polish\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" @@ -113,7 +113,7 @@ msgstr "Wpisy" #: src/components/account-info.jsx:462 #: src/components/account-info.jsx:1236 -#: src/components/compose.jsx:2786 +#: src/components/compose.jsx:2788 #: src/components/media-alt-modal.jsx:55 #: src/components/media-modal.jsx:363 #: src/components/status.jsx:1836 @@ -455,10 +455,10 @@ msgstr "Obserwuj" #: src/components/account-info.jsx:2295 #: src/components/account-sheet.jsx:38 #: src/components/compose.jsx:891 -#: src/components/compose.jsx:2742 -#: src/components/compose.jsx:3222 -#: src/components/compose.jsx:3431 -#: src/components/compose.jsx:3661 +#: src/components/compose.jsx:2744 +#: src/components/compose.jsx:3224 +#: src/components/compose.jsx:3433 +#: src/components/compose.jsx:3663 #: src/components/drafts.jsx:59 #: src/components/embed-modal.jsx:13 #: src/components/generic-accounts.jsx:151 @@ -662,8 +662,8 @@ msgstr "{0, plural, one {Plik {1} nie jest obsługiwany.} few {Pliki {2} nie są #: src/components/compose.jsx:664 #: src/components/compose.jsx:682 -#: src/components/compose.jsx:1792 -#: src/components/compose.jsx:1917 +#: src/components/compose.jsx:1794 +#: src/components/compose.jsx:1919 msgid "{maxMediaAttachments, plural, one {You can only attach up to 1 file.} other {You can only attach up to # files.}}" msgstr "{maxMediaAttachments, plural, one {Możesz załączyć co najwyżej # plik.} few {Możesz załączyć co najwyżej # pliki.} many {Możesz załączyć co najwyżej # plików.} other {Możesz załączyć co najwyżej # pliku.}}" @@ -784,17 +784,17 @@ msgid "Posting on <0/>" msgstr "Opublikowano <0/>" #: src/components/compose.jsx:1447 -#: src/components/compose.jsx:3280 +#: src/components/compose.jsx:3282 #: src/components/shortcuts-settings.jsx:715 #: src/pages/list.jsx:388 msgid "Add" msgstr "Dodaj" -#: src/components/compose.jsx:1673 +#: src/components/compose.jsx:1675 msgid "Schedule" msgstr "Zaplanuj" -#: src/components/compose.jsx:1675 +#: src/components/compose.jsx:1677 #: src/components/keyboard-shortcuts-help.jsx:155 #: src/components/status.jsx:1030 #: src/components/status.jsx:1816 @@ -803,42 +803,42 @@ msgstr "Zaplanuj" msgid "Reply" msgstr "Odpowiedz" -#: src/components/compose.jsx:1677 +#: src/components/compose.jsx:1679 msgid "Update" msgstr "Zaktualizuj" -#: src/components/compose.jsx:1678 +#: src/components/compose.jsx:1680 msgctxt "Submit button in composer" msgid "Post" msgstr "Opublikuj" -#: src/components/compose.jsx:1804 +#: src/components/compose.jsx:1806 msgid "Downloading GIF…" msgstr "Pobieram GIF…" -#: src/components/compose.jsx:1832 +#: src/components/compose.jsx:1834 msgid "Failed to download GIF" msgstr "Pobieranie GIF'a nie powiodło się" -#: src/components/compose.jsx:2047 -#: src/components/compose.jsx:2124 +#: src/components/compose.jsx:2049 +#: src/components/compose.jsx:2126 #: src/components/nav-menu.jsx:244 msgid "More…" msgstr "Więcej…" -#: src/components/compose.jsx:2556 +#: src/components/compose.jsx:2558 msgid "Uploaded" msgstr "Załadowano" -#: src/components/compose.jsx:2569 +#: src/components/compose.jsx:2571 msgid "Image description" msgstr "Opis obrazka" -#: src/components/compose.jsx:2570 +#: src/components/compose.jsx:2572 msgid "Video description" msgstr "Opis wideo" -#: src/components/compose.jsx:2571 +#: src/components/compose.jsx:2573 msgid "Audio description" msgstr "Opis audio" @@ -846,8 +846,8 @@ msgstr "Opis audio" #. placeholder {0}: prettyBytes( videoSize, ) #. placeholder {1}: prettyBytes(imageSizeLimit) #. placeholder {1}: prettyBytes(videoSizeLimit) -#: src/components/compose.jsx:2606 -#: src/components/compose.jsx:2626 +#: src/components/compose.jsx:2608 +#: src/components/compose.jsx:2628 msgid "File size too large. Uploading might encounter issues. Try reduce the file size from {0} to {1} or lower." msgstr "Rozmiar pliku jest za duży. Upload może spowodować błędy. Spróbuj zredukować rozmiar pliku z {0} do maksymalnie {1}." @@ -855,150 +855,150 @@ msgstr "Rozmiar pliku jest za duży. Upload może spowodować błędy. Spróbuj #. placeholder {1}: i18n.number(height) #. placeholder {2}: i18n.number(newWidth) #. placeholder {3}: i18n.number( newHeight, ) -#: src/components/compose.jsx:2618 -#: src/components/compose.jsx:2638 +#: src/components/compose.jsx:2620 +#: src/components/compose.jsx:2640 msgid "Dimension too large. Uploading might encounter issues. Try reduce dimension from {0}×{1}px to {2}×{3}px." msgstr "Wymiary są za duże. Upload może spowodować błędy. Spróbuj zredukować wymiary z {0}×{1} do {2}×{3}px." -#: src/components/compose.jsx:2646 +#: src/components/compose.jsx:2648 msgid "Frame rate too high. Uploading might encounter issues." msgstr "Liczba klatek na sekundę jest za wysoka. Upload może spowodować błędy." -#: src/components/compose.jsx:2706 -#: src/components/compose.jsx:2956 +#: src/components/compose.jsx:2708 +#: src/components/compose.jsx:2958 #: src/components/shortcuts-settings.jsx:726 #: src/pages/catchup.jsx:1081 #: src/pages/filters.jsx:413 msgid "Remove" msgstr "Usuń" -#: src/components/compose.jsx:2723 +#: src/components/compose.jsx:2725 #: src/compose.jsx:84 msgid "Error" msgstr "Błąd" -#: src/components/compose.jsx:2748 +#: src/components/compose.jsx:2750 msgid "Edit image description" msgstr "Edytuj opis obrazka" -#: src/components/compose.jsx:2749 +#: src/components/compose.jsx:2751 msgid "Edit video description" msgstr "Edytuj opis wideo" -#: src/components/compose.jsx:2750 +#: src/components/compose.jsx:2752 msgid "Edit audio description" msgstr "Edytuj opis audio" -#: src/components/compose.jsx:2795 -#: src/components/compose.jsx:2844 +#: src/components/compose.jsx:2797 +#: src/components/compose.jsx:2846 msgid "Generating description. Please wait…" msgstr "Generowanie opisu. Proszę czekać…" #. placeholder {0}: e.message -#: src/components/compose.jsx:2815 +#: src/components/compose.jsx:2817 msgid "Failed to generate description: {0}" msgstr "Błąd podczas generowania opisu: {0}" -#: src/components/compose.jsx:2816 +#: src/components/compose.jsx:2818 msgid "Failed to generate description" msgstr "Błąd przy generowaniu opisu." -#: src/components/compose.jsx:2828 -#: src/components/compose.jsx:2834 -#: src/components/compose.jsx:2880 +#: src/components/compose.jsx:2830 +#: src/components/compose.jsx:2836 +#: src/components/compose.jsx:2882 msgid "Generate description…" msgstr "Wygeneruj opis…" #. placeholder {0}: e?.message ? `: ${e.message}` : '' -#: src/components/compose.jsx:2867 +#: src/components/compose.jsx:2869 msgid "Failed to generate description{0}" msgstr "Błąd podczas generowania opisu{0}" #. placeholder {0}: localeCode2Text(lang) -#: src/components/compose.jsx:2882 +#: src/components/compose.jsx:2884 msgid "({0}) <0>— experimental" msgstr "({0}) <0>— eksperymentalne" -#: src/components/compose.jsx:2901 +#: src/components/compose.jsx:2903 msgid "Done" msgstr "Zrobione" #. placeholder {0}: i + 1 -#: src/components/compose.jsx:2937 +#: src/components/compose.jsx:2939 msgid "Choice {0}" msgstr "Wybór {0}" -#: src/components/compose.jsx:2984 +#: src/components/compose.jsx:2986 msgid "Multiple choices" msgstr "Wielokrotny wybór" -#: src/components/compose.jsx:2987 +#: src/components/compose.jsx:2989 msgid "Duration" msgstr "Czas trwania" -#: src/components/compose.jsx:3018 +#: src/components/compose.jsx:3020 msgid "Remove poll" msgstr "Usuń ankietę" -#: src/components/compose.jsx:3239 +#: src/components/compose.jsx:3241 msgid "Search accounts" msgstr "Szukaj kont" -#: src/components/compose.jsx:3293 +#: src/components/compose.jsx:3295 #: src/components/generic-accounts.jsx:236 msgid "Error loading accounts" msgstr "Błąd ładowania kont" -#: src/components/compose.jsx:3437 +#: src/components/compose.jsx:3439 msgid "Custom emojis" msgstr "Własne emoji" -#: src/components/compose.jsx:3457 +#: src/components/compose.jsx:3459 msgid "Search emoji" msgstr "Szkaj emoji" -#: src/components/compose.jsx:3488 +#: src/components/compose.jsx:3490 msgid "Error loading custom emojis" msgstr "Błąd podczas ładowania własnych emoji." -#: src/components/compose.jsx:3499 +#: src/components/compose.jsx:3501 msgid "Recently used" msgstr "Niedawno użyte" -#: src/components/compose.jsx:3500 +#: src/components/compose.jsx:3502 msgid "Others" msgstr "Inne" #. placeholder {0}: i18n.number(emojis.length - max) -#: src/components/compose.jsx:3538 +#: src/components/compose.jsx:3540 msgid "{0} more…" msgstr "{0} więcej…" -#: src/components/compose.jsx:3676 +#: src/components/compose.jsx:3678 msgid "Search GIFs" msgstr "Znajdź GIF" -#: src/components/compose.jsx:3691 +#: src/components/compose.jsx:3693 msgid "Powered by GIPHY" msgstr "Obsługiwane przez GIPHY" -#: src/components/compose.jsx:3699 +#: src/components/compose.jsx:3701 msgid "Type to search GIFs" msgstr "Zacznij pisać, żeby wyszukać GIF'a" -#: src/components/compose.jsx:3797 +#: src/components/compose.jsx:3799 #: src/components/media-modal.jsx:469 #: src/components/timeline.jsx:927 msgid "Previous" msgstr "Poprzednie" -#: src/components/compose.jsx:3815 +#: src/components/compose.jsx:3817 #: src/components/media-modal.jsx:488 #: src/components/timeline.jsx:944 msgid "Next" msgstr "Następne" -#: src/components/compose.jsx:3832 +#: src/components/compose.jsx:3834 msgid "Error loading GIFs" msgstr "Wystąpił błąd podczas wczytywania GIFów" @@ -2595,7 +2595,7 @@ msgstr "Nie udało się przetłumaczyć" #: src/compose.jsx:33 msgid "Editing source status" -msgstr "Edytowanie oryginalnego statusu" +msgstr "Edytowanie źródłowego statusu" #. placeholder {0}: replyToStatus.account?.acct || replyToStatus.account?.username #: src/compose.jsx:35 @@ -2853,15 +2853,15 @@ msgstr "Podgląd interfejsu nadrabiania zaległości" #: src/pages/catchup.jsx:942 msgid "Let's catch up" -msgstr "Nadróbmy zaległości" +msgstr "Nadrób zaległości" #: src/pages/catchup.jsx:947 msgid "Let's catch up on the posts from your followings." -msgstr "Nadróbmy zaległości z twoich obserwowanych treści." +msgstr "Nadrób zaległości z wpisów osób, które obserwujesz." #: src/pages/catchup.jsx:951 msgid "Show me all posts from…" -msgstr "Pokaż mi wszystkie wpisy od…" +msgstr "Pokaż mi wszystkie wpisy opublikowane nie wcześniej niż…" #: src/pages/catchup.jsx:974 msgid "until the max" @@ -2882,7 +2882,7 @@ msgstr "Do ostatniego nadrabiania zaległości ({0})" #: src/pages/catchup.jsx:1031 msgid "Note: your instance might only show a maximum of 800 posts in the Home timeline regardless of the time range. Could be less or more." -msgstr "Uwaga: twój serwer może pokazać maksymalnie 800 wpisów na głównej osi czasu niezależnie od zakresu czasu. Może być mniej lub więcej." +msgstr "Uwaga: twój serwer może wyświetlić maksymalnie około 800 wpisów na głównej osi czasu niezależnie od zakresu czasu." #: src/pages/catchup.jsx:1041 msgid "Previously…" @@ -2959,7 +2959,7 @@ msgstr "Długość" #. js-lingui-explicit-id #: src/pages/catchup.jsx:1474 msgid "group.filter" -msgstr "group.filter" +msgstr "Filtry" #: src/pages/catchup.jsx:1489 msgid "Authors" @@ -2999,7 +2999,7 @@ msgstr "Wpisy są sortowane według wagi informacji. Krótsze wpisy są \"lżejs #: src/pages/catchup.jsx:1613 msgid "Group: Authors" -msgstr "Grupuj: Autorstwo" +msgstr "Grupuj: Autorzy" #: src/pages/catchup.jsx:1616 msgid "Posts are grouped by authors, sorted by posts count per author." @@ -3310,7 +3310,7 @@ msgstr "Nie ma tu jeszcze nic." #: src/pages/list.jsx:201 #: src/pages/list.jsx:307 msgid "Manage members" -msgstr "Zarządzaj członkami" +msgstr "Zarządzaj użytkownikami" #. placeholder {0}: account.username #: src/pages/list.jsx:342 From 8d43f525a2f6df714ccdacc07fb88bced9a86e3d Mon Sep 17 00:00:00 2001 From: Chee Aun Date: Tue, 24 Jun 2025 12:10:59 +0800 Subject: [PATCH 02/32] i18n updates (gl-ES) (#1210) --- src/locales/gl-ES.po | 122 +++++++++++++++++++++---------------------- 1 file changed, 61 insertions(+), 61 deletions(-) diff --git a/src/locales/gl-ES.po b/src/locales/gl-ES.po index f93d3f4185..c39363f3df 100644 --- a/src/locales/gl-ES.po +++ b/src/locales/gl-ES.po @@ -8,7 +8,7 @@ msgstr "" "Language: gl\n" "Project-Id-Version: phanpy\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2025-06-20 01:14\n" +"PO-Revision-Date: 2025-06-24 04:10\n" "Last-Translator: \n" "Language-Team: Galician\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -101,7 +101,7 @@ msgstr "Seguidoras" #: src/components/account-info.jsx:820 #: src/components/account-info.jsx:839 msgid "following.stats" -msgstr "following.stats" +msgstr "Seguimentos" #: src/components/account-info.jsx:454 #: src/components/account-info.jsx:856 @@ -113,7 +113,7 @@ msgstr "Publicacións" #: src/components/account-info.jsx:462 #: src/components/account-info.jsx:1236 -#: src/components/compose.jsx:2786 +#: src/components/compose.jsx:2788 #: src/components/media-alt-modal.jsx:55 #: src/components/media-modal.jsx:363 #: src/components/status.jsx:1836 @@ -455,10 +455,10 @@ msgstr "Seguir" #: src/components/account-info.jsx:2295 #: src/components/account-sheet.jsx:38 #: src/components/compose.jsx:891 -#: src/components/compose.jsx:2742 -#: src/components/compose.jsx:3222 -#: src/components/compose.jsx:3431 -#: src/components/compose.jsx:3661 +#: src/components/compose.jsx:2744 +#: src/components/compose.jsx:3224 +#: src/components/compose.jsx:3433 +#: src/components/compose.jsx:3663 #: src/components/drafts.jsx:59 #: src/components/embed-modal.jsx:13 #: src/components/generic-accounts.jsx:151 @@ -662,8 +662,8 @@ msgstr "{0, plural, one {O ficheiro {1} non é compatible.} other {Os ficheiros #: src/components/compose.jsx:664 #: src/components/compose.jsx:682 -#: src/components/compose.jsx:1792 -#: src/components/compose.jsx:1917 +#: src/components/compose.jsx:1794 +#: src/components/compose.jsx:1919 msgid "{maxMediaAttachments, plural, one {You can only attach up to 1 file.} other {You can only attach up to # files.}}" msgstr "{maxMediaAttachments, plural, one {Só podes anexar un ficheiro.} other {Só podes anexar ata # ficheiros.}}" @@ -784,17 +784,17 @@ msgid "Posting on <0/>" msgstr "Publicar o <0/>" #: src/components/compose.jsx:1447 -#: src/components/compose.jsx:3280 +#: src/components/compose.jsx:3282 #: src/components/shortcuts-settings.jsx:715 #: src/pages/list.jsx:388 msgid "Add" msgstr "Engadir" -#: src/components/compose.jsx:1673 +#: src/components/compose.jsx:1675 msgid "Schedule" msgstr "Programar" -#: src/components/compose.jsx:1675 +#: src/components/compose.jsx:1677 #: src/components/keyboard-shortcuts-help.jsx:155 #: src/components/status.jsx:1030 #: src/components/status.jsx:1816 @@ -803,42 +803,42 @@ msgstr "Programar" msgid "Reply" msgstr "Responder" -#: src/components/compose.jsx:1677 +#: src/components/compose.jsx:1679 msgid "Update" msgstr "Actualizar" -#: src/components/compose.jsx:1678 +#: src/components/compose.jsx:1680 msgctxt "Submit button in composer" msgid "Post" msgstr "Publicar" -#: src/components/compose.jsx:1804 +#: src/components/compose.jsx:1806 msgid "Downloading GIF…" msgstr "Descargando GIF…" -#: src/components/compose.jsx:1832 +#: src/components/compose.jsx:1834 msgid "Failed to download GIF" msgstr "Fallou a descarga da GIF" -#: src/components/compose.jsx:2047 -#: src/components/compose.jsx:2124 +#: src/components/compose.jsx:2049 +#: src/components/compose.jsx:2126 #: src/components/nav-menu.jsx:244 msgid "More…" msgstr "Máis…" -#: src/components/compose.jsx:2556 +#: src/components/compose.jsx:2558 msgid "Uploaded" msgstr "Cargada" -#: src/components/compose.jsx:2569 +#: src/components/compose.jsx:2571 msgid "Image description" msgstr "Descrición da imaxe" -#: src/components/compose.jsx:2570 +#: src/components/compose.jsx:2572 msgid "Video description" msgstr "Descrición do vídeo" -#: src/components/compose.jsx:2571 +#: src/components/compose.jsx:2573 msgid "Audio description" msgstr "Descrición do audio" @@ -846,8 +846,8 @@ msgstr "Descrición do audio" #. placeholder {0}: prettyBytes( videoSize, ) #. placeholder {1}: prettyBytes(imageSizeLimit) #. placeholder {1}: prettyBytes(videoSizeLimit) -#: src/components/compose.jsx:2606 -#: src/components/compose.jsx:2626 +#: src/components/compose.jsx:2608 +#: src/components/compose.jsx:2628 msgid "File size too large. Uploading might encounter issues. Try reduce the file size from {0} to {1} or lower." msgstr "Ficheiro demasiado grande. Podería haber problemas ao cargalo. Intenta reducir o tamaño de {0} a {1} ou inferior." @@ -855,150 +855,150 @@ msgstr "Ficheiro demasiado grande. Podería haber problemas ao cargalo. Intenta #. placeholder {1}: i18n.number(height) #. placeholder {2}: i18n.number(newWidth) #. placeholder {3}: i18n.number( newHeight, ) -#: src/components/compose.jsx:2618 -#: src/components/compose.jsx:2638 +#: src/components/compose.jsx:2620 +#: src/components/compose.jsx:2640 msgid "Dimension too large. Uploading might encounter issues. Try reduce dimension from {0}×{1}px to {2}×{3}px." msgstr "Tamaño demasiado grande. Podería dar problemas ao cargala. Intenta reducir o tamaño de {0}×{1}px a {2}×{3}px." -#: src/components/compose.jsx:2646 +#: src/components/compose.jsx:2648 msgid "Frame rate too high. Uploading might encounter issues." msgstr "Taxa de imaxes demasiado alta. Podería dar problemas ao cargalo." -#: src/components/compose.jsx:2706 -#: src/components/compose.jsx:2956 +#: src/components/compose.jsx:2708 +#: src/components/compose.jsx:2958 #: src/components/shortcuts-settings.jsx:726 #: src/pages/catchup.jsx:1081 #: src/pages/filters.jsx:413 msgid "Remove" msgstr "Retirar" -#: src/components/compose.jsx:2723 +#: src/components/compose.jsx:2725 #: src/compose.jsx:84 msgid "Error" msgstr "Erro" -#: src/components/compose.jsx:2748 +#: src/components/compose.jsx:2750 msgid "Edit image description" msgstr "Editar descrición da imaxe" -#: src/components/compose.jsx:2749 +#: src/components/compose.jsx:2751 msgid "Edit video description" msgstr "Editar descrición do vídeo" -#: src/components/compose.jsx:2750 +#: src/components/compose.jsx:2752 msgid "Edit audio description" msgstr "Editar descrición do audio" -#: src/components/compose.jsx:2795 -#: src/components/compose.jsx:2844 +#: src/components/compose.jsx:2797 +#: src/components/compose.jsx:2846 msgid "Generating description. Please wait…" msgstr "Creando a descrición. Agarda…" #. placeholder {0}: e.message -#: src/components/compose.jsx:2815 +#: src/components/compose.jsx:2817 msgid "Failed to generate description: {0}" msgstr "Fallou a creación da descrición: {0}" -#: src/components/compose.jsx:2816 +#: src/components/compose.jsx:2818 msgid "Failed to generate description" msgstr "Fallou a creación da descrición" -#: src/components/compose.jsx:2828 -#: src/components/compose.jsx:2834 -#: src/components/compose.jsx:2880 +#: src/components/compose.jsx:2830 +#: src/components/compose.jsx:2836 +#: src/components/compose.jsx:2882 msgid "Generate description…" msgstr "Crear unha descrición…" #. placeholder {0}: e?.message ? `: ${e.message}` : '' -#: src/components/compose.jsx:2867 +#: src/components/compose.jsx:2869 msgid "Failed to generate description{0}" msgstr "Fallou a creación da descrición{0}" #. placeholder {0}: localeCode2Text(lang) -#: src/components/compose.jsx:2882 +#: src/components/compose.jsx:2884 msgid "({0}) <0>— experimental" msgstr "({0}) <0>— experimental" -#: src/components/compose.jsx:2901 +#: src/components/compose.jsx:2903 msgid "Done" msgstr "Feito" #. placeholder {0}: i + 1 -#: src/components/compose.jsx:2937 +#: src/components/compose.jsx:2939 msgid "Choice {0}" msgstr "Opción {0}" -#: src/components/compose.jsx:2984 +#: src/components/compose.jsx:2986 msgid "Multiple choices" msgstr "Varias opcións" -#: src/components/compose.jsx:2987 +#: src/components/compose.jsx:2989 msgid "Duration" msgstr "Duración" -#: src/components/compose.jsx:3018 +#: src/components/compose.jsx:3020 msgid "Remove poll" msgstr "Retirar enquisa" -#: src/components/compose.jsx:3239 +#: src/components/compose.jsx:3241 msgid "Search accounts" msgstr "Buscar contas" -#: src/components/compose.jsx:3293 +#: src/components/compose.jsx:3295 #: src/components/generic-accounts.jsx:236 msgid "Error loading accounts" msgstr "Erro ao cargar as contas" -#: src/components/compose.jsx:3437 +#: src/components/compose.jsx:3439 msgid "Custom emojis" msgstr "Emojis personais" -#: src/components/compose.jsx:3457 +#: src/components/compose.jsx:3459 msgid "Search emoji" msgstr "Buscar emoji" -#: src/components/compose.jsx:3488 +#: src/components/compose.jsx:3490 msgid "Error loading custom emojis" msgstr "Erro ao cargar os emojis personais" -#: src/components/compose.jsx:3499 +#: src/components/compose.jsx:3501 msgid "Recently used" msgstr "Usados recentemente" -#: src/components/compose.jsx:3500 +#: src/components/compose.jsx:3502 msgid "Others" msgstr "Outros" #. placeholder {0}: i18n.number(emojis.length - max) -#: src/components/compose.jsx:3538 +#: src/components/compose.jsx:3540 msgid "{0} more…" msgstr "{0} mais…" -#: src/components/compose.jsx:3676 +#: src/components/compose.jsx:3678 msgid "Search GIFs" msgstr "Buscar GIFs" -#: src/components/compose.jsx:3691 +#: src/components/compose.jsx:3693 msgid "Powered by GIPHY" msgstr "Proporcionado por GIPHY" -#: src/components/compose.jsx:3699 +#: src/components/compose.jsx:3701 msgid "Type to search GIFs" msgstr "Escribe para buscar GIFs" -#: src/components/compose.jsx:3797 +#: src/components/compose.jsx:3799 #: src/components/media-modal.jsx:469 #: src/components/timeline.jsx:927 msgid "Previous" msgstr "Anterior" -#: src/components/compose.jsx:3815 +#: src/components/compose.jsx:3817 #: src/components/media-modal.jsx:488 #: src/components/timeline.jsx:944 msgid "Next" msgstr "Seguinte" -#: src/components/compose.jsx:3832 +#: src/components/compose.jsx:3834 msgid "Error loading GIFs" msgstr "Erro ao cargar GIFs" From 4ac52e549edebdf5583d84c8246272a634f5f120 Mon Sep 17 00:00:00 2001 From: Yukai Huang Date: Tue, 1 Jul 2025 10:32:29 +0800 Subject: [PATCH 03/32] Fix: Prevent list auto-creation during IME composition --- src/components/compose.jsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/components/compose.jsx b/src/components/compose.jsx index 15636315c8..e98eca1563 100644 --- a/src/components/compose.jsx +++ b/src/components/compose.jsx @@ -2324,7 +2324,11 @@ const Textarea = forwardRef((props, ref) => { // Get line before cursor position after pressing 'Enter' const { key, target } = e; const hasTextExpander = hasTextExpanderRef.current; - if (key === 'Enter' && !(e.ctrlKey || e.metaKey || hasTextExpander)) { + if ( + key === 'Enter' && + !(e.ctrlKey || e.metaKey || hasTextExpander) && + !e.isComposing + ) { try { const { value, selectionStart } = target; const textBeforeCursor = value.slice(0, selectionStart); From a564ceadcfc7271e500d7eff9f7851a826f2e144 Mon Sep 17 00:00:00 2001 From: Lim Chee Aun Date: Fri, 4 Jul 2025 20:41:35 +0800 Subject: [PATCH 04/32] Possible fix for weird view-transition-related page crash --- src/components/media.jsx | 10 ++-- src/locales/en.po | 100 +++++++++++++++++++-------------------- 2 files changed, 56 insertions(+), 54 deletions(-) diff --git a/src/components/media.jsx b/src/components/media.jsx index d43643af1d..376c086131 100644 --- a/src/components/media.jsx +++ b/src/components/media.jsx @@ -290,10 +290,12 @@ function Media({ } else { e.preventDefault(); el.style.viewTransitionName = mediaVTN; - document.startViewTransition(() => { - el.style.viewTransitionName = ''; - location.hash = `#${to}`; - }); + setTimeout(() => { + document.startViewTransition(() => { + el.style.viewTransitionName = ''; + location.hash = `#${to}`; + }); + }, 1); } } else { onClick?.(e); diff --git a/src/locales/en.po b/src/locales/en.po index dfc2507385..8eaf07188f 100644 --- a/src/locales/en.po +++ b/src/locales/en.po @@ -108,7 +108,7 @@ msgstr "" #: src/components/account-info.jsx:462 #: src/components/account-info.jsx:1236 -#: src/components/compose.jsx:2788 +#: src/components/compose.jsx:2792 #: src/components/media-alt-modal.jsx:55 #: src/components/media-modal.jsx:363 #: src/components/status.jsx:1836 @@ -450,10 +450,10 @@ msgstr "" #: src/components/account-info.jsx:2295 #: src/components/account-sheet.jsx:38 #: src/components/compose.jsx:891 -#: src/components/compose.jsx:2744 -#: src/components/compose.jsx:3224 -#: src/components/compose.jsx:3433 -#: src/components/compose.jsx:3663 +#: src/components/compose.jsx:2748 +#: src/components/compose.jsx:3228 +#: src/components/compose.jsx:3437 +#: src/components/compose.jsx:3667 #: src/components/drafts.jsx:59 #: src/components/embed-modal.jsx:13 #: src/components/generic-accounts.jsx:151 @@ -779,7 +779,7 @@ msgid "Posting on <0/>" msgstr "Posting on <0/>" #: src/components/compose.jsx:1447 -#: src/components/compose.jsx:3282 +#: src/components/compose.jsx:3286 #: src/components/shortcuts-settings.jsx:715 #: src/pages/list.jsx:388 msgid "Add" @@ -821,19 +821,19 @@ msgstr "Failed to download GIF" msgid "More…" msgstr "" -#: src/components/compose.jsx:2558 +#: src/components/compose.jsx:2562 msgid "Uploaded" msgstr "" -#: src/components/compose.jsx:2571 +#: src/components/compose.jsx:2575 msgid "Image description" msgstr "Image description" -#: src/components/compose.jsx:2572 +#: src/components/compose.jsx:2576 msgid "Video description" msgstr "Video description" -#: src/components/compose.jsx:2573 +#: src/components/compose.jsx:2577 msgid "Audio description" msgstr "Audio description" @@ -841,8 +841,8 @@ msgstr "Audio description" #. placeholder {0}: prettyBytes( videoSize, ) #. placeholder {1}: prettyBytes(imageSizeLimit) #. placeholder {1}: prettyBytes(videoSizeLimit) -#: src/components/compose.jsx:2608 -#: src/components/compose.jsx:2628 +#: src/components/compose.jsx:2612 +#: src/components/compose.jsx:2632 msgid "File size too large. Uploading might encounter issues. Try reduce the file size from {0} to {1} or lower." msgstr "File size too large. Uploading might encounter issues. Try reduce the file size from {0} to {1} or lower." @@ -850,150 +850,150 @@ msgstr "File size too large. Uploading might encounter issues. Try reduce the fi #. placeholder {1}: i18n.number(height) #. placeholder {2}: i18n.number(newWidth) #. placeholder {3}: i18n.number( newHeight, ) -#: src/components/compose.jsx:2620 -#: src/components/compose.jsx:2640 +#: src/components/compose.jsx:2624 +#: src/components/compose.jsx:2644 msgid "Dimension too large. Uploading might encounter issues. Try reduce dimension from {0}×{1}px to {2}×{3}px." msgstr "Dimension too large. Uploading might encounter issues. Try reduce dimension from {0}×{1}px to {2}×{3}px." -#: src/components/compose.jsx:2648 +#: src/components/compose.jsx:2652 msgid "Frame rate too high. Uploading might encounter issues." msgstr "Frame rate too high. Uploading might encounter issues." -#: src/components/compose.jsx:2708 -#: src/components/compose.jsx:2958 +#: src/components/compose.jsx:2712 +#: src/components/compose.jsx:2962 #: src/components/shortcuts-settings.jsx:726 #: src/pages/catchup.jsx:1081 #: src/pages/filters.jsx:413 msgid "Remove" msgstr "" -#: src/components/compose.jsx:2725 +#: src/components/compose.jsx:2729 #: src/compose.jsx:84 msgid "Error" msgstr "" -#: src/components/compose.jsx:2750 +#: src/components/compose.jsx:2754 msgid "Edit image description" msgstr "Edit image description" -#: src/components/compose.jsx:2751 +#: src/components/compose.jsx:2755 msgid "Edit video description" msgstr "Edit video description" -#: src/components/compose.jsx:2752 +#: src/components/compose.jsx:2756 msgid "Edit audio description" msgstr "Edit audio description" -#: src/components/compose.jsx:2797 -#: src/components/compose.jsx:2846 +#: src/components/compose.jsx:2801 +#: src/components/compose.jsx:2850 msgid "Generating description. Please wait…" msgstr "Generating description. Please wait…" #. placeholder {0}: e.message -#: src/components/compose.jsx:2817 +#: src/components/compose.jsx:2821 msgid "Failed to generate description: {0}" msgstr "Failed to generate description: {0}" -#: src/components/compose.jsx:2818 +#: src/components/compose.jsx:2822 msgid "Failed to generate description" msgstr "Failed to generate description" -#: src/components/compose.jsx:2830 -#: src/components/compose.jsx:2836 -#: src/components/compose.jsx:2882 +#: src/components/compose.jsx:2834 +#: src/components/compose.jsx:2840 +#: src/components/compose.jsx:2886 msgid "Generate description…" msgstr "" #. placeholder {0}: e?.message ? `: ${e.message}` : '' -#: src/components/compose.jsx:2869 +#: src/components/compose.jsx:2873 msgid "Failed to generate description{0}" msgstr "Failed to generate description{0}" #. placeholder {0}: localeCode2Text(lang) -#: src/components/compose.jsx:2884 +#: src/components/compose.jsx:2888 msgid "({0}) <0>— experimental" msgstr "" -#: src/components/compose.jsx:2903 +#: src/components/compose.jsx:2907 msgid "Done" msgstr "" #. placeholder {0}: i + 1 -#: src/components/compose.jsx:2939 +#: src/components/compose.jsx:2943 msgid "Choice {0}" msgstr "Choice {0}" -#: src/components/compose.jsx:2986 +#: src/components/compose.jsx:2990 msgid "Multiple choices" msgstr "" -#: src/components/compose.jsx:2989 +#: src/components/compose.jsx:2993 msgid "Duration" msgstr "" -#: src/components/compose.jsx:3020 +#: src/components/compose.jsx:3024 msgid "Remove poll" msgstr "" -#: src/components/compose.jsx:3241 +#: src/components/compose.jsx:3245 msgid "Search accounts" msgstr "Search accounts" -#: src/components/compose.jsx:3295 +#: src/components/compose.jsx:3299 #: src/components/generic-accounts.jsx:236 msgid "Error loading accounts" msgstr "" -#: src/components/compose.jsx:3439 +#: src/components/compose.jsx:3443 msgid "Custom emojis" msgstr "" -#: src/components/compose.jsx:3459 +#: src/components/compose.jsx:3463 msgid "Search emoji" msgstr "Search emoji" -#: src/components/compose.jsx:3490 +#: src/components/compose.jsx:3494 msgid "Error loading custom emojis" msgstr "" -#: src/components/compose.jsx:3501 +#: src/components/compose.jsx:3505 msgid "Recently used" msgstr "Recently used" -#: src/components/compose.jsx:3502 +#: src/components/compose.jsx:3506 msgid "Others" msgstr "Others" #. placeholder {0}: i18n.number(emojis.length - max) -#: src/components/compose.jsx:3540 +#: src/components/compose.jsx:3544 msgid "{0} more…" msgstr "" -#: src/components/compose.jsx:3678 +#: src/components/compose.jsx:3682 msgid "Search GIFs" msgstr "Search GIFs" -#: src/components/compose.jsx:3693 +#: src/components/compose.jsx:3697 msgid "Powered by GIPHY" msgstr "Powered by GIPHY" -#: src/components/compose.jsx:3701 +#: src/components/compose.jsx:3705 msgid "Type to search GIFs" msgstr "" -#: src/components/compose.jsx:3799 +#: src/components/compose.jsx:3803 #: src/components/media-modal.jsx:469 #: src/components/timeline.jsx:927 msgid "Previous" msgstr "" -#: src/components/compose.jsx:3817 +#: src/components/compose.jsx:3821 #: src/components/media-modal.jsx:488 #: src/components/timeline.jsx:944 msgid "Next" msgstr "" -#: src/components/compose.jsx:3834 +#: src/components/compose.jsx:3838 msgid "Error loading GIFs" msgstr "" @@ -1357,7 +1357,7 @@ msgstr "" msgid "Filtered" msgstr "" -#: src/components/media.jsx:469 +#: src/components/media.jsx:471 msgid "Open file" msgstr "Open file" From 0c26fa4a0b93d773a380930a53afb9b41b23ef4c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 6 Jul 2025 00:02:47 +0000 Subject: [PATCH 05/32] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index ebeaec7f73..46ab4e1a43 100644 --- a/README.md +++ b/README.md @@ -400,6 +400,7 @@ Costs involved in running and developing this web app: - tferrermo (Spanish) - tkbremnes (Norwegian Bokmal) - tux93 (German) +- Usia (Ukrainian) - uzaylul (Turkish) - Vac31. (Lithuanian) - valtlai (Finnish) From db87bd7e3ed8d3322c50201f521a582f895f2e05 Mon Sep 17 00:00:00 2001 From: Lim Chee Aun Date: Wed, 9 Jul 2025 15:08:18 +0800 Subject: [PATCH 06/32] Just warn --- src/utils/browser-translator.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/browser-translator.js b/src/utils/browser-translator.js index cbd65eafa7..325cea465a 100644 --- a/src/utils/browser-translator.js +++ b/src/utils/browser-translator.js @@ -42,7 +42,7 @@ export const translate = async (text, source, target) => { source = results[0].detectedLanguage; detectedSourceLanguage = source; } catch (e) { - console.error(e); + console.warn(e); return { error: e, }; From 9e16633eb80585aa40b92517fe64d316b58739fe Mon Sep 17 00:00:00 2001 From: Lim Chee Aun Date: Wed, 9 Jul 2025 18:20:45 +0800 Subject: [PATCH 07/32] Biome format --- src/components/translation-block.jsx | 4 +++- src/locales/en.po | 14 +++++++------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/components/translation-block.jsx b/src/components/translation-block.jsx index c9891b4772..3826d3d20b 100644 --- a/src/components/translation-block.jsx +++ b/src/components/translation-block.jsx @@ -60,7 +60,9 @@ function _translangTranslate(text, source, target) { } else { // GET fetchPromise = fetch( - `https://${instance}/api/v1/translate?sl=${encodeURIComponent(source)}&tl=${encodeURIComponent(target)}&text=${encodeURIComponent(text)}`, + `https://${instance}/api/v1/translate?sl=${encodeURIComponent( + source, + )}&tl=${encodeURIComponent(target)}&text=${encodeURIComponent(text)}`, { priority: 'low', referrerPolicy: 'no-referrer', diff --git a/src/locales/en.po b/src/locales/en.po index 8eaf07188f..f659b5bf04 100644 --- a/src/locales/en.po +++ b/src/locales/en.po @@ -1306,7 +1306,7 @@ msgstr "" #: src/components/media-alt-modal.jsx:67 #: src/components/status.jsx:1144 #: src/components/status.jsx:1153 -#: src/components/translation-block.jsx:237 +#: src/components/translation-block.jsx:239 msgid "Translate" msgstr "" @@ -2563,28 +2563,28 @@ msgstr "" msgid "<0>Filtered: <1>{0}" msgstr "" -#: src/components/translation-block.jsx:194 +#: src/components/translation-block.jsx:196 msgid "Auto-translated from {sourceLangText}" msgstr "" -#: src/components/translation-block.jsx:232 +#: src/components/translation-block.jsx:234 msgid "Translating…" msgstr "" -#: src/components/translation-block.jsx:235 +#: src/components/translation-block.jsx:237 msgid "Translate from {sourceLangText} (auto-detected)" msgstr "" -#: src/components/translation-block.jsx:236 +#: src/components/translation-block.jsx:238 msgid "Translate from {sourceLangText}" msgstr "" #. placeholder {0}: detectedLang ?? '…' -#: src/components/translation-block.jsx:264 +#: src/components/translation-block.jsx:266 msgid "Auto ({0})" msgstr "" -#: src/components/translation-block.jsx:277 +#: src/components/translation-block.jsx:279 msgid "Failed to translate" msgstr "" From 2ce04239912a45153cc31b4597268cff9d8b2cd9 Mon Sep 17 00:00:00 2001 From: Lim Chee Aun Date: Wed, 9 Jul 2025 18:34:28 +0800 Subject: [PATCH 08/32] Use translated rules for report post modal --- src/components/report-modal.jsx | 61 ++++++++++++++++++++++++++++----- src/locales/en.po | 56 +++++++++++++++--------------- 2 files changed, 80 insertions(+), 37 deletions(-) diff --git a/src/components/report-modal.jsx b/src/components/report-modal.jsx index 5a8ad1f44b..0d452078e8 100644 --- a/src/components/report-modal.jsx +++ b/src/components/report-modal.jsx @@ -6,6 +6,7 @@ import { Fragment } from 'preact'; import { useMemo, useRef, useState } from 'preact/hooks'; import { api } from '../utils/api'; +import localeMatch from '../utils/locale-match'; import showToast from '../utils/show-toast'; import { getCurrentInstance } from '../utils/store-utils'; @@ -17,7 +18,7 @@ import Status from './status'; // NOTE: `dislike` hidden for now, it's actually not used for reporting // Mastodon shows another screen for unfollowing, muting or blocking instead of reporting -const CATEGORIES = [/*'dislike'*/ , 'spam', 'legal', 'violation', 'other']; +const CATEGORIES = [/*'dislike' ,*/ 'spam', 'legal', 'violation', 'other']; // `violation` will be set if there are `rule_ids[]` const CATEGORIES_INFO = { @@ -45,16 +46,58 @@ const CATEGORIES_INFO = { }, }; +function findMatchingLanguage(rule, currentLang) { + if (!rule.translations || !currentLang) return null; + const availableLanguages = Object.keys(rule.translations); + if (!availableLanguages?.length) return null; + + let matchedLang = localeMatch([currentLang], availableLanguages, null); + if (!matchedLang) { + // localeMatch fails if there are keys like zhCn, zhTw + // Convert them something like zh-CN first, try again + // Detect uppercase, then split by dash + const normalizedLanguages = availableLanguages.map((lang) => { + const parts = lang.split(/(?=[A-Z])/); + return parts + .map((part, i) => (i === 0 ? part : part.toLowerCase())) + .join('-'); + }); + matchedLang = localeMatch([currentLang], normalizedLanguages, null); + } + + // If matchedLang has dash, convert back to original format + // E.g. zh-cn to zhCn + if (matchedLang && matchedLang.includes('-')) { + const [lang, region] = matchedLang.split('-'); + matchedLang = lang + region.charAt(0).toUpperCase() + region.slice(1); + } + + return matchedLang; +} + +function translateRules(rules, currentLang) { + if (!rules?.length) return []; + if (!currentLang) return rules; + return rules.map((rule) => { + const matchedLang = findMatchingLanguage(rule, currentLang); + return { + ...rule, + _translatedText: rule.translations?.[matchedLang]?.text || null, + }; + }); +} + function ReportModal({ account, post, onClose }) { - const { _, t } = useLingui(); + const { _, t, i18n } = useLingui(); const { masto } = api(); const [uiState, setUIState] = useState('default'); const [username, domain] = account.acct.split('@'); - const [rules, currentDomain] = useMemo(() => { + const [translatedRules, currentDomain] = useMemo(() => { const { rules, domain } = getCurrentInstance(); - return [rules || [], domain]; - }); + const rawRules = rules || []; + return [translateRules(rawRules, i18n.locale), domain]; + }, [i18n.locale]); const [selectedCategory, setSelectedCategory] = useState(null); const [showRules, setShowRules] = useState(false); @@ -165,7 +208,7 @@ function ReportModal({ account, post, onClose }) {

{CATEGORIES.map((category) => - category === 'violation' && !rules?.length ? null : ( + category === 'violation' && !translatedRules?.length ? null : ( - {category === 'violation' && !!rules?.length && ( + {category === 'violation' && !!translatedRules?.length && (