diff --git a/app/javascript/mastodon/actions/notifications.js b/app/javascript/mastodon/actions/notifications.js index 641ad0e1441b6240df9015f6777c786b815355e9..3f95f6667fa385027e86edda248f0bb68b299df8 100644 --- a/app/javascript/mastodon/actions/notifications.js +++ b/app/javascript/mastodon/actions/notifications.js @@ -22,6 +22,7 @@ export const NOTIFICATIONS_SCROLL_TOP = 'NOTIFICATIONS_SCROLL_TOP'; defineMessages({ mention: { id: 'notification.mention', defaultMessage: '{name} mentioned you' }, + group: { id: 'notifications.group', defaultMessage: '{count} notifications' }, }); const fetchRelatedRelationships = (dispatch, notifications) => { diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index 1199c9535b4e1942cf7976b9302655b328d6ad8c..bb4189514b2501d6cd9370d02dab26b315627211 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "الترقيّات:", "notifications.column_settings.show": "إعرÙضها ÙÙŠ عمود", "notifications.column_settings.sound": "أصدر صوتا", + "notifications.group": "{count} notifications", "onboarding.done": "تم", "onboarding.next": "التالي", "onboarding.page_five.public_timelines": "تÙعرَض ÙÙŠ الخيط الزمني المØلي المشاركات العامة المØررة من طر٠جميع المسجلين ÙÙŠ {domain}. أما ÙÙŠ الخيط الزمني الموØد ØŒ Ùإنه يتم عرض جميع المشاركات العامة المنشورة من طر٠جميع الأشخاص المتابَعين من طر٠أعضاء {domain}. هذه هي الخيوط الزمنية العامة، وهي طريقة رائعة للتعر٠أشخاص جدد.", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index dd747ab3ba9f7c237a869e6cffa1ffdfa0a8f7de..aeb4f09dae8ea23606f7f75a829734bcc141857f 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "СподелÑниÑ:", "notifications.column_settings.show": "Покажи в колона", "notifications.column_settings.sound": "Play sound", + "notifications.group": "{count} notifications", "onboarding.done": "Done", "onboarding.next": "Next", "onboarding.page_five.public_timelines": "The local timeline shows public posts from everyone on {domain}. The federated timeline shows public posts from everyone who people on {domain} follow. These are the Public Timelines, a great way to discover new people.", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 68fc4a44ce8869e988ca587795672882befd145a..4bf8ad1c6d7166c06d69d66013fd568bd0bb511a 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Impulsos:", "notifications.column_settings.show": "Mostrar en la columna", "notifications.column_settings.sound": "Reproduïr so", + "notifications.group": "{count} notifications", "onboarding.done": "Fet", "onboarding.next": "Següent", "onboarding.page_five.public_timelines": "La lÃnia de temps local mostra missatges públics de tothom de {domain}. La lÃnia de temps federada mostra els missatges públics de tothom que la gent de {domain} segueix. Aquests són les lÃnies de temps Públiques, una bona manera de descobrir noves persones.", diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json index 9d8d950a898e17b6877e499f495018925a0b0051..8d924f9731243bbfb94bef84cee7bcad67bd298b 100644 --- a/app/javascript/mastodon/locales/co.json +++ b/app/javascript/mastodon/locales/co.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Spartere:", "notifications.column_settings.show": "Mustrà indè a colonna", "notifications.column_settings.sound": "Sunà ", + "notifications.group": "{count} notifications", "onboarding.done": "Fatta", "onboarding.next": "Siguente", "onboarding.page_five.public_timelines": "A linea pubblica lucale mostra statuti pubblichi da tuttu u mondu nant'à {domain}. A linea pubblica glubale mostra ancu quelli di a ghjente seguitata da l'utilizatori di {domain}. Quesse sò una bona manera d'incuntrà nove parsone.", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index fe5bc4443727afe833af1d243f831ce197d1ef23..84b815d506404e034cdc3e6c4ceb308c55f4c313 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Geteilte Beiträge:", "notifications.column_settings.show": "In der Spalte anzeigen", "notifications.column_settings.sound": "Ton abspielen", + "notifications.group": "{count} notifications", "onboarding.done": "Fertig", "onboarding.next": "Weiter", "onboarding.page_five.public_timelines": "Die lokale Zeitleiste zeigt alle Beiträge von Leuten, die auch auf {domain} sind. Das gesamte bekannte Netz zeigt Beiträge von allen, denen von Leuten auf {domain} gefolgt wird. Zusammen sind sie die öffentlichen Zeitleisten, ein guter Weg, um neue Leute zu finden.", diff --git a/app/javascript/mastodon/locales/defaultMessages.json b/app/javascript/mastodon/locales/defaultMessages.json index 49b287928b8ac3abe5008fe572ffa6d7c7d9d9a6..e2f3ac6dd8b7aa3c160aa7bbfc88e4ea097aeecd 100644 --- a/app/javascript/mastodon/locales/defaultMessages.json +++ b/app/javascript/mastodon/locales/defaultMessages.json @@ -17,6 +17,10 @@ { "defaultMessage": "{name} mentioned you", "id": "notification.mention" + }, + { + "defaultMessage": "{count} notifications", + "id": "notifications.group" } ], "path": "app/javascript/mastodon/actions/notifications.json" @@ -870,7 +874,7 @@ "id": "compose_form.hashtag_warning" }, { - "defaultMessage": "This toot will only be visible to all the mentioned users.", + "defaultMessage": "This toot will only be sent to all the mentioned users. However, the operators of your instance and any receiving instances may see this message.", "id": "compose_form.direct_message_warning" } ], diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index d1421be76368e058a64b2b8d826ff7382ad653ed..6e8aa0e244005ffb0916f18cf9bc38ab3ad93553 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", + "notifications.group": "{count} notifications", "onboarding.done": "Done", "onboarding.next": "Next", "onboarding.page_five.public_timelines": "The local timeline shows public posts from everyone on {domain}. The federated timeline shows public posts from everyone who people on {domain} follow. These are the Public Timelines, a great way to discover new people.", diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 478caaaf8497be2cc1cd961cf7b17a277a532220..11589d7974c7efead6256303e2c90401e351eb74 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", + "notifications.group": "{count} notifications", "onboarding.done": "Done", "onboarding.next": "Next", "onboarding.page_five.public_timelines": "The local timeline shows public posts from everyone on {domain}. The federated timeline shows public posts from everyone who people on {domain} follow. These are the Public Timelines, a great way to discover new people.", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index d5ddc23d4fae4803b69557ee5617370c52edbc3c..479fc6c6e88c6285347c1a485a6df6cc94ce18b3 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Diskonigoj:", "notifications.column_settings.show": "Montri en kolumno", "notifications.column_settings.sound": "Eligi sonon", + "notifications.group": "{count} notifications", "onboarding.done": "Farita", "onboarding.next": "Sekva", "onboarding.page_five.public_timelines": "La loka tempolinio montras publikajn mesaÄojn de ĉiuj en {domain}. La fratara tempolinio montras publikajn mesaÄojn de ĉiuj, kiuj estas sekvataj de homoj en {domain}. Tio estas la publikaj tempolinioj, kio estas bona maniero por malkovri novajn homojn.", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index 8aac2d77df27cf6294e3155d0b4fd55ea690bbab..233e465617a8ab021ac62dc804affcc388c9cc39 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Retoots:", "notifications.column_settings.show": "Mostrar en columna", "notifications.column_settings.sound": "Reproducir sonido", + "notifications.group": "{count} notifications", "onboarding.done": "Listo", "onboarding.next": "Siguiente", "onboarding.page_five.public_timelines": "La lÃnea de tiempo local muestra toots públicos de todos en {domain}. La lÃnea de tiempo federada muestra toots públicos de cualquiera a quien la gente de {domain} siga. Estas son las lÃneas de tiempo públicas, una buena forma de conocer gente nueva.", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index e927547e39e594772c55f7fc40a5ace322c2894c..773d69287044b12cf3a481e8c33d5ebaa79dd6fb 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", + "notifications.group": "{count} notifications", "onboarding.done": "Done", "onboarding.next": "Next", "onboarding.page_five.public_timelines": "The local timeline shows public posts from everyone on {domain}. The federated timeline shows public posts from everyone who people on {domain} follow. These are the Public Timelines, a great way to discover new people.", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index e19b1cd8592863a82166fd21936962684a873ef6..957046c27f054e27656c1cb6c64d519da5bcfcbc 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "بازبوق‌ها:", "notifications.column_settings.show": "نمایش در ستون", "notifications.column_settings.sound": "پخش صدا", + "notifications.group": "{count} notifications", "onboarding.done": "پایان", "onboarding.next": "بعدی", "onboarding.page_five.public_timelines": "نوشته‌های Ù…ØÙ„ÛŒ یعنی نوشته‌های همهٔ کاربران {domain}. نوشته‌های همه‌جا یعنی نوشته‌های همهٔ کسانی Ú©Ù‡ کاربران {domain} آن‌ها را Ù¾ÛŒ می‌گیرند. این Ùهرست‌های عمومی راه خوبی برای یاÙتن کاربران تازه هستند.", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index cfe9c4f331ccbbd3fb916dde44cba0181335c6b2..55b9da70ade13a33b1f480786c3d759c7ec85cf1 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Buustit:", "notifications.column_settings.show": "Näytä sarakkeessa", "notifications.column_settings.sound": "Äänimerkki", + "notifications.group": "{count} notifications", "onboarding.done": "Valmis", "onboarding.next": "Seuraava", "onboarding.page_five.public_timelines": "Paikallisella aikajanalla näytetään instanssin {domain} kaikkien käyttäjien julkiset julkaisut. Yleisellä aikajanalla näytetään kaikkien instanssin {domain} käyttäjien seuraamien käyttäjien julkiset julkaisut. Nämä julkiset aikajanat ovat loistavia paikkoja löytää uusia ihmisiä.", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index c4a41583cc0dad7f71934329b4a052f1821a32ec..44464cbc3a148a442d49c036d4b3c3dbbe11342d 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Partages :", "notifications.column_settings.show": "Afficher dans la colonne", "notifications.column_settings.sound": "Émettre un son", + "notifications.group": "{count} notifications", "onboarding.done": "Effectué", "onboarding.next": "Suivant", "onboarding.page_five.public_timelines": "Le fil public global affiche les messages de toutes les personnes suivies par les membres de {domain}. Le fil public local est identique, mais se limite aux membres de {domain}.", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 1eaaebc5328d8a6ab9a61e23260487219c3a7377..aa7ba0d1e1c7629608a664bb0e157f96cc1244b4 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Promocións:", "notifications.column_settings.show": "Mostrar en columna", "notifications.column_settings.sound": "Reproducir son", + "notifications.group": "{count} notifications", "onboarding.done": "Feito", "onboarding.next": "Seguinte", "onboarding.page_five.public_timelines": "A liña de tempo local mostra as publicacións públicas de todos en {domain}. A liña de tempo federada mostra as publicacións públicas de todos os que as persoas en {domain} seguen. Estas son as Liñas de tempo públicas, unha boa forma de descubrir novas persoas.", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index a4bcba8ff11bf939c8cd4f775058cc9d81ad6b31..324ea725edade81b062b20334b8700a2f40c04c5 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "הדהודי×:", "notifications.column_settings.show": "הצגה בטור", "notifications.column_settings.sound": "שמע מופעל", + "notifications.group": "{count} notifications", "onboarding.done": "יצי××”", "onboarding.next": "הל××”", "onboarding.page_five.public_timelines": "ציר הזמן המקומי מר××” הודעות פומביות מכל ב××™ קהילת {domain}. ציר הזמן העולמי מר××” הודעות פומביות מ×ת ×›×™ מי שב××™ קהילת {domain} ×¢×•×§×‘×™× ×חריו. ×לו צירי הזמן הפומביי×, דרך × ×”×“×¨×ª לגלות ×× ×©×™× ×—×“×©×™×.", diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json index bd1dfac4c0e9bcc67d0857d50c2dff710863884b..0216d0837407a29548c4c6d6c5d9e49bf1f61321 100644 --- a/app/javascript/mastodon/locales/hr.json +++ b/app/javascript/mastodon/locales/hr.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Boostovi:", "notifications.column_settings.show": "Prikaži u stupcu", "notifications.column_settings.sound": "Sviraj zvuk", + "notifications.group": "{count} notifications", "onboarding.done": "UÄinjeno", "onboarding.next": "Sljedeće", "onboarding.page_five.public_timelines": "Lokalni timeline prikazuje javne postove sviju od svakog na {domain}. Federalni timeline prikazuje javne postove svakog koga ljudi na {domain} slijede. To su Javni Timelineovi, sjajan naÄin za otkriti nove ljude.", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index 5059a45d4a17c9f33779fbd945b6a1b0145a24dc..795c9b7cdb61fb236e71a3607e4c84d165b126f3 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Rebloggolások:", "notifications.column_settings.show": "Oszlopban mutatás", "notifications.column_settings.sound": "Hang lejátszása", + "notifications.group": "{count} notifications", "onboarding.done": "Befejezve", "onboarding.next": "KövetkezÅ‘", "onboarding.page_five.public_timelines": "A helyi idÅ‘vonal mindenkinek a publikus posztját mutatja a(z) {domain}-n. A federált idÅ‘vonal mindenki publikus posztját mutatja akit {domain} felhasználói követnek. Ezek a publikus idÅ‘vonalak, nagyszerű mód új emberek megismerésére.", diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json index 7fe723892c620a0a7038b5cc793b1452af9041d5..2c7496d89723228792f44becd42e42209738d166 100644 --- a/app/javascript/mastodon/locales/hy.json +++ b/app/javascript/mastodon/locales/hy.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "ÕÕ¡Ö€Õ¡Õ®Õ¡Õ®Õ¶Õ¥Ö€Õ«ÖÕ", "notifications.column_settings.show": "Õ‘Õ¸Ö‚ÖÕ¡Õ¤Ö€Õ¥Õ¬ Õ½ÕµÕ¸Ö‚Õ¶Õ¸Ö‚Õ´", "notifications.column_settings.sound": "ÕÕ¡ÕµÕ¶ Õ°Õ¡Õ¶Õ¥Õ¬", + "notifications.group": "{count} notifications", "onboarding.done": "ÕŠÕ¡Õ¿Ö€Õ¡Õ½Õ¿ Õ§", "onboarding.next": "Õ€Õ¡Õ»Õ¸Ö€Õ¤", "onboarding.page_five.public_timelines": "ÕÕ¥Õ²Õ¡Õ¯Õ¡Õ¶ Õ°Õ¸Õ½Ö„Õ¨ ÖÕ¸Ö‚ÕµÖ Õ§ Õ¿Õ¡Õ¬Õ«Õ½ {domain} Õ¿Õ«Ö€Õ¸Ö‚ÕµÕ©Õ«Ö Õ¢Õ¸Õ¬Õ¸Ö€Õ« Õ°Ö€Õ¡ÕºÕ¡Ö€Õ¡Õ¯Õ¡ÕµÕ«Õ¶ Õ©Õ©Õ¥Ö€Õ¨Ö‰ Ô´Õ¡Õ·Õ¶Õ¡ÕµÕ«Õ¶ Õ°Õ¸Õ½Ö„Õ¨ ÖÕ¸Ö‚ÕµÖ Õ§ Õ¿Õ¡Õ¬Õ«Õ½ Õ°Ö€Õ¡ÕºÕ¡Ö€Õ¡Õ¯Õ¡ÕµÕ«Õ¶ Õ©Õ©Õ¥Ö€Õ¨ Õ¢Õ¸Õ¬Õ¸Ö€Õ«Ö, Õ¸Ö‚Õ´ {domain} Õ¿Õ«Ö€Õ¸Ö‚ÕµÕ©Õ« Õ´Õ¡Ö€Õ¤Õ«Õ¯ Õ°Õ¥Õ¿Õ¥Ö‚Õ¸Ö‚Õ´ Õ¥Õ¶Ö‰ ÕÖ€Õ¡Õ¶Ö„ Õ€Ö€Õ¡ÕºÕ¡Ö€Õ¡Õ¯Õ¡ÕµÕ«Õ¶ Õ°Õ¸Õ½Ö„Õ¥Ö€Õ¶ Õ¥Õ¶Õ Õ¶Õ¸Ö€ Õ´Õ¡Ö€Õ¤Õ¯Õ¡Õ¶Ö Õ¢Õ¡ÖÕ¡Õ°Õ¡ÕµÕ¿Õ¥Õ¬Õ¸Ö‚ Õ°Ö€Õ¡Õ·Õ¡Õ¬Õ« Õ´Õ«Õ»Õ¸ÖÖ‰", diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json index 07b26a0a5aff4ca5c8435e1b9ece380ab0f85add..2fcd5c48223946766c5ff6ec0d9ae4b19dd074cf 100644 --- a/app/javascript/mastodon/locales/id.json +++ b/app/javascript/mastodon/locales/id.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Boost:", "notifications.column_settings.show": "Tampilkan dalam kolom", "notifications.column_settings.sound": "Mainkan suara", + "notifications.group": "{count} notifications", "onboarding.done": "Selesei", "onboarding.next": "Selanjutnya", "onboarding.page_five.public_timelines": "Linimasa lokal menampilkan semua postingan publik dari semua orang di {domain}. Linimasa gabungan menampilkan postingan publik dari semua orang yang diikuti oleh {domain}. Ini semua adalah Linimasa Publik, cara terbaik untuk bertemu orang lain.", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index a8ab72339edea1d889a3a32d6d523a8ad12cf1b2..9d429bda86684917361aa36dbb98a5652eaf509f 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Repeti:", "notifications.column_settings.show": "Montrar en kolumno", "notifications.column_settings.sound": "Plear sono", + "notifications.group": "{count} notifications", "onboarding.done": "Done", "onboarding.next": "Next", "onboarding.page_five.public_timelines": "The local timeline shows public posts from everyone on {domain}. The federated timeline shows public posts from everyone who people on {domain} follow. These are the Public Timelines, a great way to discover new people.", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index 8bd65286462bf3d4c6cc7a2e1970fee8a7e82273..64baf54409f9fcab326f4841d049248bf5f0913a 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Post condivisi:", "notifications.column_settings.show": "Mostra in colonna", "notifications.column_settings.sound": "Riproduci suono", + "notifications.group": "{count} notifications", "onboarding.done": "Fatto", "onboarding.next": "Prossimo", "onboarding.page_five.public_timelines": "La timeline locale mostra i post pubblici di tutti gli utenti di {domain}. La timeline federata mostra i post pubblici di tutti gli utenti seguiti da quelli di {domain}. Queste sono le timeline pubbliche, che vi danno grandi possibilità di scoprire nuovi utenti.", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index 8be04cf7349502b100e8197d5adc9599f2c9304e..95f8438d5a46f2e566334bbfcc41df12f19dc024 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "ブースト:", "notifications.column_settings.show": "カラムã«è¡¨ç¤º", "notifications.column_settings.sound": "通知音をå†ç”Ÿ", + "notifications.group": "{count} notifications", "onboarding.done": "完了", "onboarding.next": "次ã¸", "onboarding.page_five.public_timelines": "連åˆã‚¿ã‚¤ãƒ ラインã§ã¯{domain}ã®äººãŒãƒ•ã‚©ãƒãƒ¼ã—ã¦ã„ã‚‹Mastodon全体ã§ã®å…¬é–‹æŠ•ç¨¿ã‚’表示ã—ã¾ã™ã€‚åŒã˜ããƒãƒ¼ã‚«ãƒ«ã‚¿ã‚¤ãƒ ラインã§ã¯{domain}ã®ã¿ã®å…¬é–‹æŠ•ç¨¿ã‚’表示ã—ã¾ã™ã€‚", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index fc13a5b5b05ff3a2adeeccc6690c28a547819a43..bb6f3558c29dc0e6ab84c042420f4e89bec3f2dc 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "부스트:", "notifications.column_settings.show": "ì»¬ëŸ¼ì— í‘œì‹œ", "notifications.column_settings.sound": "íš¨ê³¼ìŒ ìž¬ìƒ", + "notifications.group": "{count} notifications", "onboarding.done": "완료", "onboarding.next": "다ìŒ", "onboarding.page_five.public_timelines": "ì—°í•© 타임ë¼ì¸ì—서는 {domain}ì˜ ì‚¬ëžŒë“¤ì´ íŒ”ë¡œìš° ì¤‘ì¸ Mastodon ì „ì²´ ì¸ìŠ¤í„´ìŠ¤ì˜ 공개 í¬ìŠ¤íŠ¸ë¥¼ 표시합니다. 로컬 타임ë¼ì¸ì—서는 {domain} ë§Œì˜ ê³µê°œ í¬ìŠ¤íŠ¸ë¥¼ 표시합니다.", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index 047583ce2cdbca8c2eafc87736e6118ca47cccc0..63a452377bd915e41cd0381bb3b89ebbe541451d 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "In kolom tonen", "notifications.column_settings.sound": "Geluid afspelen", + "notifications.group": "{count} notifications", "onboarding.done": "Klaar", "onboarding.next": "Volgende", "onboarding.page_five.public_timelines": "De lokale tijdlijn toont openbare toots van iedereen op {domain}. De globale tijdlijn toont openbare toots van iedereen die door gebruikers van {domain} worden gevolgd, dus ook mensen van andere Mastodonservers. Dit zijn de openbare tijdlijnen en vormen een uitstekende manier om nieuwe mensen te leren kennen.", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index 05dae0630c93fb541fa1cfee935516d25f8436a6..1496afb83bfcdc4b723ba592cd7c4059e56e80f4 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Fremhevet:", "notifications.column_settings.show": "Vis i kolonne", "notifications.column_settings.sound": "Spill lyd", + "notifications.group": "{count} notifications", "onboarding.done": "Ferdig", "onboarding.next": "Neste", "onboarding.page_five.public_timelines": "Den lokale tidslinjen viser offentlige poster fra alle pÃ¥ {domain}. Felles tidslinje viser offentlige poster fra alle som brukere pÃ¥ {domain} følger. Dette er de offentlige tidslinjene, et fint sted Ã¥ oppdage nye brukere.", diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json index 615af998f158d37578f5711b0050f0e5d4878b2e..3ae29129f45f1c7eb9a1d8afa02cee966d098ff0 100644 --- a/app/javascript/mastodon/locales/oc.json +++ b/app/javascript/mastodon/locales/oc.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Partatges :", "notifications.column_settings.show": "Mostrar dins la colomna", "notifications.column_settings.sound": "Emetre un son", + "notifications.group": "{count} notifications", "onboarding.done": "Sortir", "onboarding.next": "Seguent", "onboarding.page_five.public_timelines": "Lo flux local mòstra los estatuts publics del monde de vòstra instà ncia, aquà {domain}. Lo flux federat mòstra los estatuts publics de la gent que los de {domain} sègon. Son los fluxes publics, un bon biais de trobar de mond.", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index 0df36f969fda8468732994cd11c0739ea554abbc..be5693bc9af61b723591e6003658d0bb59d94bc0 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Podbicia:", "notifications.column_settings.show": "Pokaż w kolumnie", "notifications.column_settings.sound": "Odtwarzaj dźwiÄ™k", + "notifications.group": "{count} notifications", "onboarding.done": "Gotowe", "onboarding.next": "Dalej", "onboarding.page_five.public_timelines": "Lokalna oÅ› czasu zawiera wszystkie publiczne wpisy z {domain}. Globalna oÅ› czasu wyÅ›wietla publiczne wpisy Å›ledzonych przez czÅ‚onków {domain}. SÄ… to publiczne osie czasu – najlepszy sposób na poznanie nowych osób.", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index 2360c41e76b565c2f8f2b705b2a54fdbf799a219..26ae5ef3059f42c58ddf35387f214c3dadc34658 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Compartilhamento:", "notifications.column_settings.show": "Mostrar nas colunas", "notifications.column_settings.sound": "Reproduzir som", + "notifications.group": "{count} notifications", "onboarding.done": "Pronto", "onboarding.next": "Próximo", "onboarding.page_five.public_timelines": "A timeline local mostra postagens públicas de todos os usuários no {domain}. A timeline federada mostra todas as postagens de todas as pessoas que pessoas no {domain} seguem. Estas são as timelines públicas, uma ótima maneira de conhecer novas pessoas.", diff --git a/app/javascript/mastodon/locales/pt.json b/app/javascript/mastodon/locales/pt.json index 3ac92dd5771d8a68c84983153d0dc20aae328068..02ffc825c3deeefe38cbac3551787dde4d5ad4b3 100644 --- a/app/javascript/mastodon/locales/pt.json +++ b/app/javascript/mastodon/locales/pt.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Partilhas:", "notifications.column_settings.show": "Mostrar nas colunas", "notifications.column_settings.sound": "Reproduzir som", + "notifications.group": "{count} notifications", "onboarding.done": "Pronto", "onboarding.next": "Próximo", "onboarding.page_five.public_timelines": "A timeline local mostra as publicações de todos os utilizadores em {domain}. A timeline global mostra as publicações de todas as pessoas que pessoas em {domain} seguem. Estas são as timelines públicas, uma óptima forma de conhecer novas pessoas.", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index 5cf983b8325dc84f0bd3496a62b87c555a3b4dce..ca857457876d86d98fdbd198ebc4d3cbd6c2c05e 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "ПродвижениÑ:", "notifications.column_settings.show": "Показывать в колонке", "notifications.column_settings.sound": "Проигрывать звук", + "notifications.group": "{count} notifications", "onboarding.done": "Готово", "onboarding.next": "Далее", "onboarding.page_five.public_timelines": "Ð›Ð¾ÐºÐ°Ð»ÑŒÐ½Ð°Ñ Ð»ÐµÐ½Ñ‚Ð° показывает публичные поÑÑ‚Ñ‹ вÑех пользователей {domain}. Ð“Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð°Ñ Ð»ÐµÐ½Ñ‚Ð° показывает публичные поÑÑ‚Ñ‹ вÑех людей, на которых подпиÑаны пользователи {domain}. Ðто - публичные ленты, отличный ÑпоÑоб найти новые знакомÑтва.", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index 4f7969bd3d1557e3494aa34d7ca316ebd4c138fd..cf9ead5e76ad8c19bc59cfb852f5c622073301e9 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Boosty:", "notifications.column_settings.show": "ZobraziÅ¥ v stĺpci", "notifications.column_settings.sound": "PrehraÅ¥ zvuk", + "notifications.group": "{count} notifications", "onboarding.done": "Koniec", "onboarding.next": "ÄŽalej", "onboarding.page_five.public_timelines": "Lokálna Äasová os zobrazuje verejné správy od vÅ¡etkých na {domain}. Federovaná Äasová os zobrazuje verejné správy od vÅ¡etkých tých, Äo následujú užÃvatrľov {domain} z iných serverov. Tieto sú takzvané Verejné ÄŒasové Osi, výborná možnosÅ¥ ako nájsÅ¥ a spoznaÅ¥ nových ľudÃ.", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index 69b4162587928bb54dd65a9a109db0c708ae7948..dbad35c34b6a328a3ef83bae6302afe13cbdf5c3 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", + "notifications.group": "{count} notifications", "onboarding.done": "Done", "onboarding.next": "Next", "onboarding.page_five.public_timelines": "The local timeline shows public posts from everyone on {domain}. The federated timeline shows public posts from everyone who people on {domain} follow. These are the Public Timelines, a great way to discover new people.", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index 490b3a51ac8c3ef6900416d06f6d84cc0bd562ee..bc54a08659b861fd122ce086782fd7cfa52ce6c4 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "PodrÅ¡ki:", "notifications.column_settings.show": "Prikaži u koloni", "notifications.column_settings.sound": "PuÅ¡taj zvuk", + "notifications.group": "{count} notifications", "onboarding.done": "Gotovo", "onboarding.next": "Sledeće", "onboarding.page_five.public_timelines": "Lokalna lajna prikazuje sve javne statuse od svih na domenu {domain}. Federisana lajna prikazuje javne statuse od svih ljudi koje prate korisnici sa domena {domain}. Ovo su javne lajne, sjajan naÄin da otkrijete nove ljude.", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index b331f9f48aa63ebbaf05f9ec068516f851fd5a6d..5cdeb24fc83e122a465a22b3947ccc763f3fe6cf 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Подршки:", "notifications.column_settings.show": "Прикажи у колони", "notifications.column_settings.sound": "Пуштај звук", + "notifications.group": "{count} notifications", "onboarding.done": "Готово", "onboarding.next": "Следеће", "onboarding.page_five.public_timelines": "Локална лајна приказује Ñве јавне ÑтатуÑе од Ñвих на домену {domain}. ФедериÑана лајна приказује јавне ÑтатуÑе од Ñвих људи које прате кориÑници Ñа домена {domain}. Ово Ñу јавне лајне, Ñјајан начин да откријете нове људе.", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index 36b20076453d2b93d04860922e54e0ca38099804..579921046c5344786147c83f8556875372c91b40 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Knuffar:", "notifications.column_settings.show": "Visa i kolumnen", "notifications.column_settings.sound": "Spela upp ljud", + "notifications.group": "{count} notifications", "onboarding.done": "Klart", "onboarding.next": "Nästa", "onboarding.page_five.public_timelines": "Den lokala tidslinjen visar offentliga inlägg frÃ¥n alla pÃ¥ {domain}. Den förenade tidslinjen visar offentliga inlägg frÃ¥n alla personer pÃ¥ {domain} som följer. Dom här offentliga tidslinjerna är ett bra sätt att upptäcka nya människor.", diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json index 038ac6abbd5660bae85ce2362cc6e8cfa4ad4b7d..55415da81148706b24e400b17b57966f6fae88fe 100644 --- a/app/javascript/mastodon/locales/te.json +++ b/app/javascript/mastodon/locales/te.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", + "notifications.group": "{count} notifications", "onboarding.done": "Done", "onboarding.next": "Next", "onboarding.page_five.public_timelines": "The local timeline shows public posts from everyone on {domain}. The federated timeline shows public posts from everyone who people on {domain} follow. These are the Public Timelines, a great way to discover new people.", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 8d24395af66359b7590f3b77a129ac0a707112a9..243941cafa126068f19daa45f88fcaff92b92ade 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", + "notifications.group": "{count} notifications", "onboarding.done": "Done", "onboarding.next": "Next", "onboarding.page_five.public_timelines": "The local timeline shows public posts from everyone on {domain}. The federated timeline shows public posts from everyone who people on {domain} follow. These are the Public Timelines, a great way to discover new people.", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index a377e7b74a5eb1763722603d985ee3d1aad7eeae..c6d27b609426b5885ca3d6c0937cb76d93e1b23c 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Boost’lar:", "notifications.column_settings.show": "Bildirimlerde göster", "notifications.column_settings.sound": "Ses çal", + "notifications.group": "{count} notifications", "onboarding.done": "Tamam", "onboarding.next": "Sıradaki", "onboarding.page_five.public_timelines": "Yerel zaman tüneli, bu sunucudaki herkesten gelen gönderileri gösterir.Federe zaman tüneli, kullanıcıların diÄŸer sunuculardan takip ettiÄŸi kiÅŸilerin herkese açık gönderilerini gösterir. Bunlar herkese açık zaman tünelleridir ve yeni insanlarla tanışmak için harika yerlerdir. The federated timeline shows public posts from everyone who people on {domain} follow. These are the Public Timelines, a great way to discover new ", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index 613d1a00dab4ef8990d104aeaa7372f79798d381..2e174e18646590fb815ed2f15f241145fb1ad916 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "Передмухи:", "notifications.column_settings.show": "Показати в колонці", "notifications.column_settings.sound": "Відтворювати звук", + "notifications.group": "{count} notifications", "onboarding.done": "Готово", "onboarding.next": "Далі", "onboarding.page_five.public_timelines": "Локальна Ñтрічка показує публічні поÑти уÑÑ–Ñ… кориÑтувачів {domain}. Глобальна Ñтрічка показує публічні поÑти уÑÑ–Ñ… людей, на Ñких підпиÑані кориÑтувачі {domain}. Це публичні Ñтрічки, відмінний ÑпоÑіб знайти нових людей.", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 073dbe6cb2a145042f82b87e14cc9b32b53fee71..254d078eb75387a58ec2f0c60b57dcf53ddb6dbe 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "å½“æœ‰äººè½¬å˜Ÿäº†ä½ çš„å˜Ÿæ–‡æ—¶ï¼š", "notifications.column_settings.show": "在通知æ 显示", "notifications.column_settings.sound": "æ’放音效", + "notifications.group": "{count} notifications", "onboarding.done": "出å‘ï¼", "onboarding.next": "下一æ¥", "onboarding.page_five.public_timelines": "“本站时间轴â€æ˜¾ç¤ºçš„是由本站({domain})用户å‘布的所有公开嘟文。“跨站公共时间轴â€æ˜¾ç¤ºçš„的是由本站用户关注对象所å‘布的所有公开嘟文。这些就是寻人好去处的公共时间轴啦。", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index 9334b5d2067b0e3e2cdd501400f9babc23b9c0e7..9fb8aa2f9f210cbc651b09520825c004640b59de 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "è½‰æŽ¨ä½ çš„æ–‡ç« ï¼š", "notifications.column_settings.show": "在通知欄顯示", "notifications.column_settings.sound": "æ’放音效", + "notifications.group": "{count} notifications", "onboarding.done": "開始使用", "onboarding.next": "繼續", "onboarding.page_five.public_timelines": "「本站時間軸ã€é¡¯ç¤ºåœ¨ {domain} å„ç”¨æˆ¶çš„å…¬é–‹æ–‡ç« ã€‚ã€Œè·¨ç«™æ™‚é–“è»¸ã€é¡¯ç¤ºåœ¨ {domain} å„人關注的所有用戶(包括其他æœå‹™ç«™ï¼‰çš„å…¬é–‹æ–‡ç« ã€‚é€™äº›éƒ½æ˜¯ã€Œå…¬å…±æ™‚é–“è»¸ã€ï¼Œæ˜¯èªè˜æ–°æœ‹å‹çš„好地方。", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index 0f4d04947b3e5ccd4d7e9c93a16b3f9c543d73bd..ae917a5accb72c28766a7b87db5673a16cb3d44e 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -186,6 +186,7 @@ "notifications.column_settings.reblog": "轉推:", "notifications.column_settings.show": "顯示在欄ä½ä¸", "notifications.column_settings.sound": "æ’放音效", + "notifications.group": "{count} notifications", "onboarding.done": "完æˆ", "onboarding.next": "下一æ¥", "onboarding.page_five.public_timelines": "本地時間軸顯示 {domain} 上所有人的公開貼文。è¯ç›Ÿæ™‚間軸顯示 {domain} 上所有人關注的公開貼文。這就是公開時間軸,發ç¾æ–°æœ‹å‹çš„好地方。", diff --git a/app/javascript/mastodon/service_worker/web_push_locales.js b/app/javascript/mastodon/service_worker/web_push_locales.js new file mode 100644 index 0000000000000000000000000000000000000000..ce96ae297c5ecec87b69c64089e105aaf3385674 --- /dev/null +++ b/app/javascript/mastodon/service_worker/web_push_locales.js @@ -0,0 +1,30 @@ +/* @preval */ + +const fs = require('fs'); +const path = require('path'); + +const filtered = {}; +const filenames = fs.readdirSync(path.resolve(__dirname, '../locales')); + +filenames.forEach(filename => { + if (!filename.match(/\.json$/) || filename.match(/defaultMessages|whitelist/)) return; + + const content = fs.readFileSync(path.resolve(__dirname, `../locales/${filename}`), 'utf-8'); + const full = JSON.parse(content); + const locale = filename.split('.')[0]; + + filtered[locale] = { + 'notification.favourite': full['notification.favourite'] || '', + 'notification.follow': full['notification.follow'] || '', + 'notification.mention': full['notification.mention'] || '', + 'notification.reblog': full['notification.reblog'] || '', + + 'status.show_more': full['status.show_more'] || '', + 'status.reblog': full['status.reblog'] || '', + 'status.favourite': full['status.favourite'] || '', + + 'notifications.group': full['notifications.group'] || '', + }; +}); + +module.exports = JSON.parse(JSON.stringify(filtered)); diff --git a/app/javascript/mastodon/service_worker/web_push_notifications.js b/app/javascript/mastodon/service_worker/web_push_notifications.js index f63cff335a16c970c38fa9b29a72dbb7237e91d2..16eaefcbb1754e0df3b9eabf272dbefc466377a9 100644 --- a/app/javascript/mastodon/service_worker/web_push_notifications.js +++ b/app/javascript/mastodon/service_worker/web_push_notifications.js @@ -1,36 +1,32 @@ +import IntlMessageFormat from 'intl-messageformat'; +import locales from './web_push_locales'; + const MAX_NOTIFICATIONS = 5; const GROUP_TAG = 'tag'; -// Avoid loading intl-messageformat and dealing with locales in the ServiceWorker -const formatGroupTitle = (message, count) => message.replace('%{count}', count); - const notify = options => self.registration.getNotifications().then(notifications => { - if (notifications.length === MAX_NOTIFICATIONS) { - // Reached the maximum number of notifications, proceed with grouping + if (notifications.length >= MAX_NOTIFICATIONS) { // Reached the maximum number of notifications, proceed with grouping const group = { - title: formatGroupTitle(options.data.message, notifications.length + 1), - body: notifications - .sort((n1, n2) => n1.timestamp < n2.timestamp) - .map(notification => notification.title).join('\n'), + title: formatMessage('notifications.group', options.data.preferred_locale, { count: notifications.length + 1 }), + body: notifications.sort((n1, n2) => n1.timestamp < n2.timestamp).map(notification => notification.title).join('\n'), badge: '/badge.png', icon: '/android-chrome-192x192.png', tag: GROUP_TAG, data: { url: (new URL('/web/notifications', self.location)).href, count: notifications.length + 1, - message: options.data.message, + preferred_locale: options.data.preferred_locale, }, }; notifications.forEach(notification => notification.close()); return self.registration.showNotification(group.title, group); - } else if (notifications.length === 1 && notifications[0].tag === GROUP_TAG) { - // Already grouped, proceed with appending the notification to the group - const group = cloneNotification(notifications[0]); + } else if (notifications.length === 1 && notifications[0].tag === GROUP_TAG) { // Already grouped, proceed with appending the notification to the group + const group = { ...notifications[0] }; - group.title = formatGroupTitle(group.data.message, group.data.count + 1); + group.title = formatMessage('notifications.group', options.data.preferred_locale, { count: group.data.count + 1 }); group.body = `${options.title}\n${group.body}`; group.data = { ...group.data, count: group.data.count + 1 }; @@ -40,57 +36,87 @@ const notify = options => return self.registration.showNotification(options.title, options); }); -const handlePush = (event) => { - const options = event.data.json(); - - options.body = options.data.nsfw || options.data.content; - options.dir = options.data.dir; - options.image = options.image || undefined; // Null results in a network request (404) - options.timestamp = options.timestamp && new Date(options.timestamp); - - const expandAction = options.data.actions.find(action => action.todo === 'expand'); +const fetchFromApi = (path, method, accessToken) => { + const url = (new URL(path, self.location)).href; - if (expandAction) { - options.actions = [expandAction]; - options.hiddenActions = options.data.actions.filter(action => action !== expandAction); - options.data.hiddenImage = options.image; - options.image = undefined; - } else { - options.actions = options.data.actions; - } + return fetch(url, { + headers: { + 'Authorization': `Bearer ${accessToken}`, + 'Content-Type': 'application/json', + }, - event.waitUntil(notify(options)); + method: method, + credentials: 'include', + }).then(res => { + if (res.ok) { + return res; + } else { + throw new Error(res.status); + } + }).then(res => res.json()); }; -const cloneNotification = (notification) => { - const clone = { }; +const formatMessage = (messageId, locale, values = {}) => + (new IntlMessageFormat(locales[locale][messageId], locale)).format(values); - for(var k in notification) { - clone[k] = notification[k]; - } +const handlePush = (event) => { + const { access_token, notification_id, preferred_locale, title, body, icon } = event.data.json(); + + // Placeholder until more information can be loaded + event.waitUntil( + notify({ + title, + body, + icon, + tag: notification_id, + timestamp: new Date(), + badge: '/badge.png', + data: { access_token, preferred_locale, url: '/web/notifications' }, + }).then(() => fetchFromApi(`/api/v1/notifications/${notification_id}`, 'get', access_token)).then(notification => { + const options = {}; + + options.title = formatMessage(`notification.${notification.type}`, preferred_locale, { name: notification.account.display_name.length > 0 ? notification.account.display_name : notification.account.username }); + options.body = notification.status && notification.status.content; + options.icon = notification.account.avatar_static; + options.timestamp = notification.created_at && new Date(notification.created_at); + options.tag = notification.id; + options.badge = '/badge.png'; + options.image = notification.status && notification.status.media_attachments.length > 0 && notification.status.media_attachments[0].preview_url || undefined; + options.data = { access_token, preferred_locale, id: notification.status ? notification.status.id : notification.account.id, url: notification.status ? `/web/statuses/${notification.status.id}` : `/web/accounts/${notification.account.id}` }; + + if (notification.status && notification.status.sensitive) { + options.data.hiddenBody = notification.status.content; + options.data.hiddenImage = notification.status.media_attachments.length > 0 && notification.status.media_attachments[0].preview_url; + + options.body = undefined; + options.image = undefined; + options.actions = [actionExpand(preferred_locale)]; + } else if (notification.status) { + options.actions = [actionReblog(preferred_locale), actionFavourite(preferred_locale)]; + } - return clone; + return notify(options); + }) + ); }; -const expandNotification = (notification) => { - const nextNotification = cloneNotification(notification); +const actionExpand = preferred_locale => ({ + action: 'expand', + icon: '/web-push-icon_expand.png', + title: formatMessage('status.show_more', preferred_locale), +}); - nextNotification.body = notification.data.content; - nextNotification.image = notification.data.hiddenImage; - nextNotification.actions = notification.data.actions.filter(action => action.todo !== 'expand'); +const actionReblog = preferred_locale => ({ + action: 'reblog', + icon: '/web-push-icon_reblog.png', + title: formatMessage('status.reblog', preferred_locale), +}); - return self.registration.showNotification(nextNotification.title, nextNotification); -}; - -const makeRequest = (notification, action) => - fetch(action.action, { - headers: { - 'Authorization': `Bearer ${notification.data.access_token}`, - 'Content-Type': 'application/json', - }, - method: action.method, - credentials: 'include', - }); +const actionFavourite = preferred_locale => ({ + action: 'favourite', + icon: '/web-push-icon_favourite.png', + title: formatMessage('status.favourite', preferred_locale), +}); const findBestClient = clients => { const focusedClient = clients.find(client => client.focused); @@ -99,6 +125,24 @@ const findBestClient = clients => { return focusedClient || visibleClient || clients[0]; }; +const expandNotification = notification => { + const newNotification = { ...notification }; + + newNotification.body = newNotification.data.hiddenBody; + newNotification.image = newNotification.data.hiddenImage; + newNotification.actions = [actionReblog(notification.data.preferred_locale), actionFavourite(notification.data.preferred_locale)]; + + return self.registration.showNotification(newNotification.title, newNotification); +}; + +const removeActionFromNotification = (notification, action) => { + const newNotification = { ...notification }; + + newNotification.actions = newNotification.actions.filter(item => item.action !== action); + + return self.registration.showNotification(newNotification.title, newNotification); +}; + const openUrl = url => self.clients.matchAll({ type: 'window' }).then(clientList => { if (clientList.length !== 0) { @@ -124,27 +168,19 @@ const openUrl = url => return self.clients.openWindow(url); }); -const removeActionFromNotification = (notification, action) => { - const actions = notification.actions.filter(act => act.action !== action.action); - const nextNotification = cloneNotification(notification); - - nextNotification.actions = actions; - - return self.registration.showNotification(nextNotification.title, nextNotification); -}; - const handleNotificationClick = (event) => { const reactToNotificationClick = new Promise((resolve, reject) => { if (event.action) { - const action = event.notification.data.actions.find(({ action }) => action === event.action); - - if (action.todo === 'expand') { + if (event.action === 'expand') { resolve(expandNotification(event.notification)); - } else if (action.todo === 'request') { - resolve(makeRequest(event.notification, action) - .then(() => removeActionFromNotification(event.notification, action))); + } else if (event.action === 'reblog') { + const { data } = event.notification; + resolve(fetchFromApi(`/api/v1/statuses/${data.id}/reblog`, 'post', data.access_token).then(() => removeActionFromNotification(event.notification, 'reblog'))); + } else if (event.action === 'favourite') { + const { data } = event.notification; + resolve(fetchFromApi(`/api/v1/statuses/${data.id}/favourite`, 'post', data.access_token).then(() => removeActionFromNotification(event.notification, 'favourite'))); } else { - reject(`Unknown action: ${action.todo}`); + reject(`Unknown action: ${event.action}`); } } else { event.notification.close(); diff --git a/app/models/web/push_subscription.rb b/app/models/web/push_subscription.rb index df549c6d3d13428651545690044077f2dfcfb7ba..7da3428fea47d31aa31097a0a6efc4fd9ddd0e66 100644 --- a/app/models/web/push_subscription.rb +++ b/app/models/web/push_subscription.rb @@ -21,8 +21,8 @@ class Web::PushSubscription < ApplicationRecord has_one :session_activation def push(notification) - I18n.with_locale(associated_user.locale || I18n.default_locale) do - push_payload(message_from(notification), 48.hours.seconds) + I18n.with_locale(associated_user&.locale || I18n.default_locale) do + push_payload(payload_for_notification(notification), 48.hours.seconds) end end @@ -46,16 +46,13 @@ class Web::PushSubscription < ApplicationRecord @associated_access_token = if access_token_id.nil? find_or_create_access_token.token else - access_token + access_token.token end end private def push_payload(message, ttl = 5.minutes.seconds) - # TODO: Make sure that the payload does not - # exceed 4KB - Webpush::PayloadTooLarge - Webpush.payload_send( message: Oj.dump(message), endpoint: endpoint, @@ -70,16 +67,20 @@ class Web::PushSubscription < ApplicationRecord ) end - def message_from(notification) - serializable_resource = ActiveModelSerializers::SerializableResource.new(notification, serializer: Web::NotificationSerializer, scope: self, scope_name: :current_push_subscription) - serializable_resource.as_json + def payload_for_notification(notification) + ActiveModelSerializers::SerializableResource.new( + notification, + serializer: Web::NotificationSerializer, + scope: self, + scope_name: :current_push_subscription + ).as_json end def find_or_create_access_token Doorkeeper::AccessToken.find_or_create_for( Doorkeeper::Application.find_by(superapp: true), session_activation.user_id, - Doorkeeper::OAuth::Scopes.from_string('read write follow'), + Doorkeeper::OAuth::Scopes.from_string('read write follow push'), Doorkeeper.configuration.access_token_expires_in, Doorkeeper.configuration.refresh_token_enabled? ) diff --git a/app/serializers/web/notification_serializer.rb b/app/serializers/web/notification_serializer.rb index 31c703832488ef6cb601dc618c0adc75b5fd3012..f3c4ffc477c85421e8cf3a5f245d9044b11f5f63 100644 --- a/app/serializers/web/notification_serializer.rb +++ b/app/serializers/web/notification_serializer.rb @@ -2,168 +2,37 @@ class Web::NotificationSerializer < ActiveModel::Serializer include RoutingHelper - include StreamEntriesHelper + include ActionView::Helpers::TextHelper + include ActionView::Helpers::SanitizeHelper - class DataSerializer < ActiveModel::Serializer - include RoutingHelper - include StreamEntriesHelper - include ActionView::Helpers::SanitizeHelper + attributes :access_token, :preferred_locale, :notification_id, + :notification_type, :icon, :title, :body - attributes :content, :nsfw, :url, :actions, - :access_token, :message, :dir - - def content - decoder.decode(strip_tags(body)) - end - - def dir - rtl?(body) ? 'rtl' : 'ltr' - end - - def nsfw - return if object.target_status.nil? - object.target_status.spoiler_text.presence - end - - def url - case object.type - when :mention - web_url("statuses/#{object.target_status.id}") - when :follow - web_url("accounts/#{object.from_account.id}") - when :favourite - web_url("statuses/#{object.target_status.id}") - when :reblog - web_url("statuses/#{object.target_status.id}") - end - end - - def actions - return @actions if defined?(@actions) - - @actions = [] - - if object.type == :mention - @actions << expand_action if collapsed? - @actions << favourite_action - @actions << reblog_action if rebloggable? - end - - @actions - end - - def access_token - return if actions.empty? - current_push_subscription.associated_access_token - end - - def message - I18n.t('push_notifications.group.title') - end - - private - - def body - case object.type - when :mention - object.target_status.text - when :follow - object.from_account.note - when :favourite - object.target_status.text - when :reblog - object.target_status.text - end - end - - def decoder - @decoder ||= HTMLEntities.new - end - - def expand_action - { - title: I18n.t('push_notifications.mention.action_expand'), - icon: full_asset_url('web-push-icon_expand.png', skip_pipeline: true), - todo: 'expand', - action: 'expand', - } - end - - def favourite_action - { - title: I18n.t('push_notifications.mention.action_favourite'), - icon: full_asset_url('web-push-icon_favourite.png', skip_pipeline: true), - todo: 'request', - method: 'POST', - action: "/api/v1/statuses/#{object.target_status.id}/favourite", - } - end - - def reblog_action - { - title: I18n.t('push_notifications.mention.action_boost'), - icon: full_asset_url('web-push-icon_reblog.png', skip_pipeline: true), - todo: 'request', - method: 'POST', - action: "/api/v1/statuses/#{object.target_status.id}/reblog", - } - end - - def collapsed? - !object.target_status.nil? && (object.target_status.sensitive? || object.target_status.spoiler_text.present?) - end - - def rebloggable? - !object.target_status.nil? && !object.target_status.hidden? - end + def access_token + current_push_subscription.associated_access_token end - attributes :title, :image, :badge, :tag, - :timestamp, :icon - - has_one :data, serializer: DataSerializer - - def title - case object.type - when :mention - I18n.t('push_notifications.mention.title', name: name) - when :follow - I18n.t('push_notifications.follow.title', name: name) - when :favourite - I18n.t('push_notifications.favourite.title', name: name) - when :reblog - I18n.t('push_notifications.reblog.title', name: name) - end + def preferred_locale + current_push_subscription.associated_user&.locale || I18n.default_locale end - def image - return if object.target_status.nil? || object.target_status.media_attachments.empty? - full_asset_url(object.target_status.media_attachments.first.file.url(:small)) - end - - def badge - full_asset_url('badge.png', skip_pipeline: true) - end - - def tag + def notification_id object.id end - def timestamp - object.created_at + def notification_type + object.type end def icon - object.from_account.avatar_static_url + full_asset_url(object.from_account.avatar_static_url) end - def data - object + def title + I18n.t("notification_mailer.#{object.type}.subject", name: object.from_account.display_name.presence || object.from_account.username) end - private - - def name - display_name(object.from_account) + def body + truncate(strip_tags(object.target_status&.spoiler_text&.presence || object.target_status&.text || object.from_account.note), length: 140) end end diff --git a/config/locales/ar.yml b/config/locales/ar.yml index 194d91cb0292fe4639822c2c87888b8ec7e3e869..f187bd6acc4bf8be263dc18a88d3ca603205fbe0 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -576,19 +576,6 @@ ar: other: إعدادات أخرى publishing: النشر web: الويب - push_notifications: - favourite: - title: أعجب %{name} بمنشورك - follow: - title: "%{name} من متتبعيك الآن" - group: - title: "%{count} إخطارات" - mention: - action_boost: ترقية - action_expand: عرض المزيد - title: أشار إليك %{name} - reblog: - title: قام %{name} بترقية منشورك remote_follow: acct: قم بإدخال عنوان Øسابك username@domain الذي من خلاله تود المتابعة missing_resource: تعذر العثور على رابط التØويل المطلوب الخاص بØسابك diff --git a/config/locales/ca.yml b/config/locales/ca.yml index 97b52cfa5db2c5290eb8a8bddade1712db1cc266..4e051bc3637db3785bf6f54e26c727c77a0c8b88 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -594,20 +594,6 @@ ca: other: Altre publishing: Publicació web: Web - push_notifications: - favourite: - title: "%{name} ha marcat com a preferit el teu estat" - follow: - title: "%{name} ara et segueix" - group: - title: "%{count} notificacions" - mention: - action_boost: Retooteja - action_expand: Mostra'n més - action_favourite: Preferit - title: "%{name} t'ha mencionat" - reblog: - title: "%{name} t'ha retootejat" remote_follow: acct: Escriu el teu usuari@domini des del qual vols seguir missing_resource: No s'ha pogut trobar la URL de redirecció necessaria per al compte diff --git a/config/locales/co.yml b/config/locales/co.yml index 637491d6b2d9ef16b53b919ef41ed3b66ff1c063..32661b2c5c0b6d37e6c2e0a5bd91b8161e71717c 100644 --- a/config/locales/co.yml +++ b/config/locales/co.yml @@ -593,20 +593,6 @@ co: other: Altre publishing: Pubblicazione web: Web - push_notifications: - favourite: - title: "%{name} hà aghjuntu u vostru statutu à i so favuriti" - follow: - title: "%{name} vi seguita" - group: - title: "%{count} nutificazioni" - mention: - action_boost: Sparte - action_expand: Vede di più - action_favourite: Aghjunghje à i favuriti - title: "%{name} v’hà mintuvatu·a" - reblog: - title: "%{name} hà spartutu u vostru statutu" remote_follow: acct: Entrate u vostru cugnome@istanza da induve vulete siguità stu contu missing_resource: Ùn avemu pussutu à truvà l’indirizzu di ridirezzione diff --git a/config/locales/de.yml b/config/locales/de.yml index c0254f73f3fc8e1fd47cbc08213698d9e1cabd3e..75c8b11cf02d986154bc71d8a3662335b3f97797 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -594,20 +594,6 @@ de: other: Weiteres publishing: Beiträge web: Web - push_notifications: - favourite: - title: "%{name} hat deinen Beitrag favorisiert" - follow: - title: "%{name} folgt dir nun" - group: - title: "%{count} Benachrichtigungen" - mention: - action_boost: Teilen - action_expand: Mehr anzeigen - action_favourite: Favorisieren - title: "%{name} hat dich erwähnt" - reblog: - title: "%{name} hat deinen Beitrag geteilt" remote_follow: acct: Profilname@Domain, von wo aus du dieser Person folgen möchtest missing_resource: Die erforderliche Weiterleitungs-URL für dein Konto konnte nicht gefunden werden diff --git a/config/locales/en.yml b/config/locales/en.yml index 0257241cf10af83266f5ca1f71d02ea2676ffed8..b9429dbee5c59847c3a924183affbc20252d52fa 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -595,20 +595,6 @@ en: other: Other publishing: Publishing web: Web - push_notifications: - favourite: - title: "%{name} favourited your status" - follow: - title: "%{name} is now following you" - group: - title: "%{count} notifications" - mention: - action_boost: Boost - action_expand: Show more - action_favourite: Favourite - title: "%{name} mentioned you" - reblog: - title: "%{name} boosted your status" remote_follow: acct: Enter your username@domain you want to follow from missing_resource: Could not find the required redirect URL for your account diff --git a/config/locales/eo.yml b/config/locales/eo.yml index 0903e351761a7c8ec6afd68080c5dc0af3de35b7..8920709147ce291e3780f92eca62993b556ba9a0 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -596,20 +596,6 @@ eo: other: Aliaj aferoj publishing: Publikado web: Reto - push_notifications: - favourite: - title: "%{name} stelumis vian mesaÄon" - follow: - title: "%{name} eksekvis vin" - group: - title: "%{count} sciigoj" - mention: - action_boost: Diskonigi - action_expand: Montri pli - action_favourite: Stelumi - title: "%{name} menciis vin" - reblog: - title: "%{name} diskonigis vian mesaÄon" remote_follow: acct: Enmetu vian uzantnomo@domajno de kie vi volas sekvi missing_resource: La URL de plusendado ne estis trovita diff --git a/config/locales/es.yml b/config/locales/es.yml index 593716b1698f7de2646af03ef47ade7672f8ed62..3e22e264365431f5fe48c53c21fb8a5058b566f7 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -593,20 +593,6 @@ es: other: Otros publishing: Publicación web: Web - push_notifications: - favourite: - title: "%A {name} le gustó tu estado" - follow: - title: "%{name} te ha empezado a seguir" - group: - title: "%{count} notificaciones" - mention: - action_boost: Retoot - action_expand: Mostrar más - action_favourite: Me Gusta - title: "%{name} te mencionó" - reblog: - title: "%{name} boosteó tu estado" remote_follow: acct: Ingesa tu usuario@dominio desde el que quieres seguir missing_resource: No se pudo encontrar la URL de redirección requerida para tu cuenta diff --git a/config/locales/fa.yml b/config/locales/fa.yml index 1a8372d634d730d7a4793e404a82bb1849013bb6..b73f2401deeebb2d82d4716ee491fa599b0cfff6 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -593,20 +593,6 @@ fa: other: سایر publishing: انتشار web: وب - push_notifications: - favourite: - title: "%{name} نوشتهٔ شما را پسندید" - follow: - title: "%{name} هم‌اینک پیگیر شماست" - group: - title: "%{count} اعلان" - mention: - action_boost: بازبوق - action_expand: نمایش بیشتر - action_favourite: پسندیدن - title: "%{name} از شما نام برد" - reblog: - title: "%{name} نوشتهٔ شما را بازبوقید" remote_follow: acct: نشانی Øساب username@domain خود را این‌جا بنویسید missing_resource: نشانی اینترنتی برای رسیدن به Øساب شما پیدا نشد diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 68a239ba35056de65700b889b2e94b78169fe057..1e02efbd24b7a0da201f680b48d52346f5cb90b4 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -590,20 +590,6 @@ fi: other: Muut publishing: Julkaiseminen web: Web - push_notifications: - favourite: - title: "%{name} tykkäsi tilastasi" - follow: - title: "%{name} seuraa nyt sinua" - group: - title: "%{count} ilmoitusta" - mention: - action_boost: Buustaa - action_expand: Näytä lisää - action_favourite: Tykkää - title: "%{nimi} mainitsi sinut" - reblog: - title: "%{name} buustasi tilaasi" remote_follow: acct: Syötä se käyttäjätunnus@verkkotunnus, josta haluat seurata missing_resource: Vaadittavaa uudelleenohjaus-URL:ää tiliisi ei löytynyt diff --git a/config/locales/fr.yml b/config/locales/fr.yml index f8f9026c8a8bf8f32e7132e9c11b99b08048f73c..4265a724805d6297ae6caa485581d2d97daa6b2d 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -594,20 +594,6 @@ fr: other: Autre publishing: Publication web: Web - push_notifications: - favourite: - title: "%{name} a mis votre statut en favori" - follow: - title: "%{name} vous suit" - group: - title: "%{count} notifications" - mention: - action_boost: Partager - action_expand: Montrer plus - action_favourite: Ajouter aux favoris - title: "%{name} vous a mentionné·e" - reblog: - title: "%{name} a partagé votre statut" remote_follow: acct: Entrez votre pseudo@instance depuis lequel vous voulez suivre cet·te utilisateurâ‹…ice missing_resource: L’URL de redirection n’a pas pu être trouvée diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 6cf83ca270f0438cd1b95415c1b9589595b71448..d38cffb969d1e180b4cf3161c7f46d4a6a4e1dc1 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -594,20 +594,6 @@ gl: other: Outro publishing: Publicando web: Web - push_notifications: - favourite: - title: "%{name} marcou favorito o seu estado" - follow: - title: "%{name} agora está a seguila" - group: - title: "%{count} notificacións" - mention: - action_boost: Promover - action_expand: Mostar máis - action_favourite: Favorito - title: "%{name} mencionouna" - reblog: - title: "%{name} promoveu un dos seus estados" remote_follow: acct: Introduza o seu nomedeusuaria@dominio desde onde quere facer seguimento missing_resource: Non se puido atopar o URL de redirecionamento requerido para a súa conta diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 0cd0021c161cc2a7935e027460bcddc8e0ca9f40..41093aa43490a0f7167ac68af0c0fa291594a30a 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -531,20 +531,6 @@ hu: other: Egyéb publishing: Közzététel web: Web - push_notifications: - favourite: - title: "%{name} a kedvenceihez adta a tülköd" - follow: - title: "%{name} mostantól követ téged" - group: - title: "%{count} értesÃtés" - mention: - action_boost: Reblog - action_expand: Mutass többet - action_favourite: Kedvencekhez adás - title: "%{name} megemlÃtett téged" - reblog: - title: "%{name} reblogolta a tülköd" remote_follow: acct: Ãrd be a felhasználódat, amelyrÅ‘l követni szeretnéd felhasznalonev@domain formátumban missing_resource: A fiókodnál nem található a szükséges átirányÃtási URL diff --git a/config/locales/it.yml b/config/locales/it.yml index b53645c9fd71150faa1832b4b839b550152cfa7c..a761bff4e0db5fdc8ac3f43114f535597c5b4914 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -506,18 +506,6 @@ it: other: Altro publishing: Pubblicazione web: Web - push_notifications: - favourite: - title: "%{name} ha segnato il tuo status come apprezzato" - follow: - title: "%{name} ha iniziato a seguirti" - group: - title: "%{count} notifiche" - mention: - action_expand: Mostra altro - action_favourite: Apprezzato - reblog: - title: "%{name} ha condiviso il tuo status" remote_follow: acct: Inserisci il tuo username@dominio da cui vuoi seguire questo utente missing_resource: Impossibile trovare l'URL di reindirizzamento richiesto per il tuo account diff --git a/config/locales/ja.yml b/config/locales/ja.yml index b6c8f7bcc165099c75bf49508688efde30ee634f..cb7340ddeb669d39aef9a6d6cc76e61f9254c279 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -594,20 +594,6 @@ ja: other: ãã®ä»– publishing: 投稿 web: ウェブ - push_notifications: - favourite: - title: ã‚ãªãŸã®ãƒˆã‚¥ãƒ¼ãƒˆãŒ %{name} ã•ã‚“ã«ãŠæ°—ã«å…¥ã‚Šç™»éŒ²ã•ã‚Œã¾ã—㟠- follow: - title: "%{name} ã•ã‚“ã«ãƒ•ã‚©ãƒãƒ¼ã•ã‚Œã¾ã—ãŸ" - group: - title: "%{count} 件ã®é€šçŸ¥" - mention: - action_boost: ブースト - action_expand: ã‚‚ã£ã¨è¦‹ã‚‹ - action_favourite: ãŠæ°—ã«å…¥ã‚Š - title: "%{name} ã•ã‚“ã‹ã‚‰è¿”ä¿¡ãŒã‚ã‚Šã¾ã—ãŸ" - reblog: - title: ã‚ãªãŸã®ãƒˆã‚¥ãƒ¼ãƒˆãŒ %{name} ã•ã‚“ã«ãƒ–ーストã•ã‚Œã¾ã—㟠remote_follow: acct: ã‚ãªãŸã® ユーザーå@ドメイン を入力ã—ã¦ãã ã•ã„ missing_resource: リダイレクト先ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—㟠diff --git a/config/locales/ko.yml b/config/locales/ko.yml index c0da95db33f535a2c65c58a89d838aa51fab0b6d..38f411dd5f2cc644e2ab5567533149223505bff2 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -596,20 +596,6 @@ ko: other: 기타 publishing: í¼ë¸”리싱 web: 웹 - push_notifications: - favourite: - title: "%{name} ë‹˜ì´ ë‹¹ì‹ ì˜ íˆ¿ë¥¼ ì¦ê²¨ì°¾ê¸°ì— 등ë¡í–ˆìŠµë‹ˆë‹¤" - follow: - title: "%{name} ë‹˜ì´ ë‚˜ë¥¼ 팔로우 í•˜ê³ ìžˆìŠµë‹ˆë‹¤" - group: - title: "%{count} ê±´ì˜ ì•Œë¦¼" - mention: - action_boost: 부스트 - action_expand: ë”보기 - action_favourite: ì¦ê²¨ì°¾ê¸° - title: "%{name} ë‹˜ì´ ë‹µìž¥ì„ ë³´ëƒˆìŠµë‹ˆë‹¤" - reblog: - title: "%{name} ë‹˜ì´ ë‹¹ì‹ ì˜ íˆ¿ì„ ë¶€ìŠ¤íŠ¸ 했습니다" remote_follow: acct: ì•„ì´ë””@ë„ë©”ì¸ì„ ìž…ë ¥í•´ 주ì‹ì‹œì˜¤ missing_resource: ë¦¬ë””ë ‰ì…˜ 대ìƒì„ ì°¾ì„ ìˆ˜ 없습니다 diff --git a/config/locales/nl.yml b/config/locales/nl.yml index 53468a67d778ae01d652f9eb4fd9e4e9e49b4ad8..7ec512d9eb78837c5881bd7995211374a81d8136 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -594,20 +594,6 @@ nl: other: Overig publishing: Publiceren web: Webapp - push_notifications: - favourite: - title: "%{name} markeerde jouw toot als favoriet" - follow: - title: "%{name} volgt jou nu" - group: - title: "%{count} meldingen" - mention: - action_boost: Boost - action_expand: Meer tonen - action_favourite: Favoriet - title: "%{name} vermeldde jou" - reblog: - title: "%{name} boostte jouw toot" remote_follow: acct: Geef jouw account@domein.tld op waarvandaan je wilt volgen missing_resource: Kon vereiste doorverwijzings-URL voor jouw account niet vinden diff --git a/config/locales/no.yml b/config/locales/no.yml index 837042f851192563fbcbbb128fdd803743e2fb70..eb1d27a199420adc928710bea455768254f646c0 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -531,20 +531,6 @@ other: Annet publishing: Publisering web: Web - push_notifications: - favourite: - title: "%{name} favoriserte din status" - follow: - title: "%{name} følger deg nÃ¥" - group: - title: "%{count} varslinger" - mention: - action_boost: Fremhev - action_expand: Vis mer - action_favourite: Favoritter - title: "%{name} nevnte deg" - reblog: - title: "%{name} fremhevde din status" remote_follow: acct: Tast inn brukernavn@domene som du vil følge fra missing_resource: Kunne ikke finne URLen for din konto diff --git a/config/locales/oc.yml b/config/locales/oc.yml index c9a33aad613b04b4f798b6ce3db1c958d7cdd00b..4a84534571fb01f571a7df8631bfc5a3d4eae8b2 100644 --- a/config/locales/oc.yml +++ b/config/locales/oc.yml @@ -668,20 +668,6 @@ oc: other: Autre publishing: Publicar web: Interfà cia Web - push_notifications: - favourite: - title: "%{name} a mes vòstre estatut en favorit" - follow: - title: "%{name} vos sèc ara" - group: - title: "%{count} notificacions" - mention: - action_boost: Partejar - action_expand: Ne veire mai - action_favourite: Ajustar als favorits - title: "%{name} vos a mencionat" - reblog: - title: "%{name} a partejat vòstre estatut" remote_follow: acct: Picatz vòstre utilizaire@instà ncia que cal utilizar per sègre aqueste utilizaire missing_resource: URL de redireccion pas trobada diff --git a/config/locales/pl.yml b/config/locales/pl.yml index e465388e2398a71f1a558fa4a125e4b1af4b522e..15dfdf740a73f85c70404c83a4e4b8976bf46505 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -603,20 +603,6 @@ pl: other: PozostaÅ‚e publishing: Publikowanie web: Sieć - push_notifications: - favourite: - title: "%{name} dodaÅ‚ Twój wpis do ulubionych" - follow: - title: "%{name} zaczÄ…Å‚ CiÄ™ Å›ledzić" - group: - title: "%{count} powiadomieÅ„" - mention: - action_boost: Podbij - action_expand: Pokaż wiÄ™cej - action_favourite: Dodaj do ulubionych - title: "%{name} wspomniaÅ‚ o Tobie" - reblog: - title: "%{name} podbiÅ‚ Twój wpis" remote_follow: acct: Podaj swój adres (nazwa@domena), z którego chcesz Å›ledzić missing_resource: Nie udaÅ‚o siÄ™ znaleźć adresu przekierowania z Twojej domeny diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index 702236198b487b0146b02d58044cf84ed9eca2f5..cf7584999ae0e83a41b5f096a4012d86bb037dcc 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -593,20 +593,6 @@ pt-BR: other: Outro publishing: Publicação web: Web - push_notifications: - favourite: - title: "%{name} favoritou a sua postagem" - follow: - title: "%{name} está te seguindo" - group: - title: "%{count} notificações" - mention: - action_boost: Compartilhar - action_expand: Mostrar mais - action_favourite: Favoritar - title: "%{name} mencionou você" - reblog: - title: "%{name} compartilhou a sua postagem" remote_follow: acct: Insira o seu usuário@domÃnio do qual você quer seguir missing_resource: Não foi possÃvel encontrar a URL de direcionamento para a sua conta diff --git a/config/locales/pt.yml b/config/locales/pt.yml index 7c10124ff6e75ccad414bc4d3d8daff641742fac..a1370c91d5f7703ad782d82c399c2effff5f1f10 100644 --- a/config/locales/pt.yml +++ b/config/locales/pt.yml @@ -534,20 +534,6 @@ pt: other: Outro publishing: Publicação web: Web - push_notifications: - favourite: - title: "%{name} adicionou o teu post aos favoritos" - follow: - title: "%{name} começou a seguir-te" - group: - title: "%{count} notificações" - mention: - action_boost: Partilhar - action_expand: Mostrar mais - action_favourite: Adicionar aos favoritos - title: "%{name} mencionou-te" - reblog: - title: "%{name} partilhou o teu post" remote_follow: acct: Entre seu usuário@domÃnio do qual quer seguir missing_resource: Não foi possÃvel achar a URL de redirecionamento para sua conta diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 2363bba12aaae9189ed8c8b81d3b3b3631279d8d..19b844612364a17475e8b92cb466965d668d13a6 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -606,20 +606,6 @@ ru: other: Другое publishing: ÐŸÑƒÐ±Ð»Ð¸ÐºÐ°Ñ†Ð¸Ñ web: WWW - push_notifications: - favourite: - title: Ваш ÑÑ‚Ð°Ñ‚ÑƒÑ Ð¿Ð¾Ð½Ñ€Ð°Ð²Ð¸Ð»ÑÑ %{name} - follow: - title: "%{name} теперь подпиÑан(а) на ВаÑ" - group: - title: "%{count} уведомлений" - mention: - action_boost: Продвинуть - action_expand: Развернуть - action_favourite: ÐравитÑÑ - title: Ð’Ð°Ñ ÑƒÐ¿Ð¾Ð¼Ñнул(а) %{name} - reblog: - title: "%{name} продвинул(а) Ваш ÑтатуÑ" remote_follow: acct: Введите username@domain, откуда Ð’Ñ‹ хотите подпиÑатьÑÑ missing_resource: ПоиÑк требуемого Ð¿ÐµÑ€ÐµÐ½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ URL Ð´Ð»Ñ Ð’Ð°ÑˆÐµÐ³Ð¾ аккаунта завершилÑÑ Ð½ÐµÑƒÐ´Ð°Ñ‡ÐµÐ¹ diff --git a/config/locales/sk.yml b/config/locales/sk.yml index 8debd87ff228544638904ee871eba502ffb13bc0..3e1300b2b947ec9178fcfa9db099f28ea38b0138 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -591,20 +591,6 @@ sk: other: Ostatné publishing: Publikovanie web: Web - push_notifications: - favourite: - title: "%{name} si obľúbil/a tvoj prÃspevok" - follow: - title: "%{name} Å¥a teraz následuje" - group: - title: "%{count} notifikácie" - mention: - action_boost: Pozdvihni - action_expand: Ukáž viac - action_favourite: Obľúbené - title: "%{name} Å¥a spomenul/a" - reblog: - title: "%{name} vyzdvihli tvoj prÃspevok" remote_follow: acct: NapÃÅ¡ svoju prezývku@doménu z ktorej chceÅ¡ následovaÅ¥ missing_resource: Nemôžeme nájsÅ¥ potrebnú presmerovaciu adresu k tvojmu úÄtu diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml index 0c7756c53ea0961a7754edfaf9a6255acf51299b..15c6b00acf88b204e96462184e1a89632388aef6 100644 --- a/config/locales/sr-Latn.yml +++ b/config/locales/sr-Latn.yml @@ -525,20 +525,6 @@ sr-Latn: other: Ostali publishing: Objavljivanje web: Veb - push_notifications: - favourite: - title: "%{name} je stavio VaÅ¡ status za omiljeni" - follow: - title: "%{name} Vas je zapratio" - group: - title: "%{count} obaveÅ¡tenja" - mention: - action_boost: Podrži - action_expand: Prikaži joÅ¡ - action_favourite: Omiljeni - title: "%{name} Vas je pomenuo" - reblog: - title: "%{name} je podržao(la) VaÅ¡ status" remote_follow: acct: Unesite VaÅ¡ korisnik@domen sa koga želite da pratite missing_resource: Ne mogu da naÄ‘em zahtevanu adresu preusmeravanja za VaÅ¡ nalog diff --git a/config/locales/sr.yml b/config/locales/sr.yml index 1cb87ff30c857d36330ce4a1c89f13117d85e9d5..d34a2ecbf2d04dff69a6d5cdf4cac99fdea2e777 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -525,20 +525,6 @@ sr: other: ОÑтали publishing: Објављивање web: Веб - push_notifications: - favourite: - title: "%{name} је Ñтавио Ваш ÑÑ‚Ð°Ñ‚ÑƒÑ Ð·Ð° омиљени" - follow: - title: "%{name} Ð’Ð°Ñ Ñ˜Ðµ запратио" - group: - title: "%{count} обавештења" - mention: - action_boost: Подржи - action_expand: Прикажи још - action_favourite: Омиљени - title: "%{name} Ð’Ð°Ñ Ñ˜Ðµ поменуо" - reblog: - title: "%{name} је подржао(ла) Ваш ÑтатуÑ" remote_follow: acct: УнеÑите Ваш кориÑник@домен Ñа кога желите да пратите missing_resource: Ðе могу да нађем захтевану адреÑу преуÑмеравања за Ваш налог diff --git a/config/locales/sv.yml b/config/locales/sv.yml index 1b09656555ae11864bc8b79611138e5e24e5d333..73645d013633e149b2ab9ee28addb0a0b088f2ef 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -592,20 +592,6 @@ sv: other: Annat publishing: Publicering web: Webb - push_notifications: - favourite: - title: "%{name} favoriserade din status" - follow: - title: "%{name} följer nu dig" - group: - title: "%{count} meddelanden" - mention: - action_boost: Knuffa - action_expand: Visa mer - action_favourite: Favoriter - title: "%{name} nämnde dig" - reblog: - title: "%{name} boostade din status" remote_follow: acct: Ange ditt användarnamn@domän du vill följa frÃ¥n missing_resource: Det gick inte att hitta den begärda omdirigeringsadressen för ditt konto diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index 5eca9e6a5658075708fb7f2b5cefc63fea4cfc6c..9f98a893d9ed646851c6002834da2ca83bb49c4e 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -523,20 +523,6 @@ zh-CN: other: 其他 publishing: å‘布 web: 站内 - push_notifications: - favourite: - title: "%{name} 收è—äº†ä½ çš„å˜Ÿæ–‡" - follow: - title: "%{name} å…³æ³¨äº†ä½ " - group: - title: "%{count} æ¡æ–°é€šçŸ¥" - mention: - action_boost: 转嘟 - action_expand: 显示更多 - action_favourite: æ”¶è— - title: "%{name} æåˆ°äº†ä½ " - reblog: - title: "%{name} è½¬å˜Ÿäº†ä½ çš„å˜Ÿæ–‡" remote_follow: acct: è¯·è¾“å…¥ä½ çš„â€œç”¨æˆ·å@实例域å†missing_resource: æ— æ³•ç¡®å®šä½ çš„å¸æˆ·çš„跳转 URL diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml index 04df558b1deb7f95d479029f498576e623ac47c3..14eedc9bac181e7b098d0a0b367ec6c560bbc20f 100644 --- a/config/locales/zh-HK.yml +++ b/config/locales/zh-HK.yml @@ -593,20 +593,6 @@ zh-HK: other: 其他 publishing: 發佈 web: 站内 - push_notifications: - favourite: - title: "%{name} 收è—äº†ä½ çš„æ–‡ç« " - follow: - title: "%{name} é—œæ³¨äº†ä½ " - group: - title: "%{count} æ¢æ–°é€šçŸ¥" - mention: - action_boost: 轉推 - action_expand: 顯示更多 - action_favourite: æ”¶è— - title: "%{name} æåˆ°äº†ä½ " - reblog: - title: "%{name} è½‰æŽ¨äº†ä½ çš„æ–‡ç« " remote_follow: acct: è«‹è¼¸å…¥ä½ çš„ï¸°ç”¨æˆ¶å稱@æœå‹™é»žåŸŸå missing_resource: ç„¡æ³•æ‰¾åˆ°ä½ ç”¨æˆ¶çš„è½‰æŽ¥ç¶²å€