Merge pull request #1482 from ThibG/glitch-soc/merge-upstream

Merge upstream changes
th-downstream
ThibG 4 years ago committed by GitHub
commit f94a59ffd7

@ -30,7 +30,7 @@ plugins:
channel: eslint-7 channel: eslint-7
rubocop: rubocop:
enabled: true enabled: true
channel: rubocop-0-92 channel: rubocop-1-70
sass-lint: sass-lint:
enabled: true enabled: true
exclude_patterns: exclude_patterns:

@ -48,12 +48,12 @@ and provided thanks to the work of the following contributors:
* [takayamaki](https://github.com/takayamaki) * [takayamaki](https://github.com/takayamaki)
* [masarakki](https://github.com/masarakki) * [masarakki](https://github.com/masarakki)
* [ticky](https://github.com/ticky) * [ticky](https://github.com/ticky)
* [trwnh](https://github.com/trwnh)
* [ThisIsMissEm](https://github.com/ThisIsMissEm) * [ThisIsMissEm](https://github.com/ThisIsMissEm)
* [hinaloe](https://github.com/hinaloe) * [hinaloe](https://github.com/hinaloe)
* [hcmiya](https://github.com/hcmiya) * [hcmiya](https://github.com/hcmiya)
* [stephenburgess8](https://github.com/stephenburgess8) * [stephenburgess8](https://github.com/stephenburgess8)
* [Wonderfall](mailto:wonderfall@targaryen.house) * [Wonderfall](mailto:wonderfall@targaryen.house)
* [trwnh](https://github.com/trwnh)
* [matteoaquila](https://github.com/matteoaquila) * [matteoaquila](https://github.com/matteoaquila)
* [yukimochi](https://github.com/yukimochi) * [yukimochi](https://github.com/yukimochi)
* [palindromordnilap](https://github.com/palindromordnilap) * [palindromordnilap](https://github.com/palindromordnilap)
@ -705,308 +705,414 @@ This document is provided for informational purposes only. Since it is only upda
Following people have contributed to translation of Mastodon: Following people have contributed to translation of Mastodon:
- ᏦᏁᎢᎵᏫ 😷 (*Spanish, Argentina*) - ᏦᏁᎢᎵᏫ 😷 (KNTRO) (*Spanish, Argentina*)
- Sveinn í Felli (*Icelandic*) - Sveinn í Felli (sveinki) (*Icelandic*)
- qezwan (*Persian, Sorani (Kurdish)*)
- Hồ Nhất Duy (kantcer) (*Vietnamese*)
- taicv (*Vietnamese*) - taicv (*Vietnamese*)
- ButterflyOfFire (*Arabic; French; Kabyle*) - Zoltán Gera (gerazo) (*Hungarian*)
- Duy (*Vietnamese*) - ButterflyOfFire (BoFFire) (*French, Arabic, Kabyle*)
- Evert Prants (*Estonian*) - adrmzz (*Sardinian*)
- Zoltán Gera (*Hungarian*) - Ramdziana F Y (rafeyu) (*Indonesian*)
- Daniele Lira Mereb (*Portuguese, Brazilian*) - Evert Prants (IcyDiamond) (*Estonian*)
- Kristijan Tkalec (*Slovenian*) - Daniele Lira Mereb (danilmereb) (*Portuguese, Brazilian*)
- stan ionut (*Romanian*) - Xosé M. (XoseM) (*Spanish, Galician*)
- Ramdziana F Y (*Indonesian*) - Kristijan Tkalec (lapor) (*Slovenian*)
- Michal Stanke (*Czech*) - stan ionut (stanionut12) (*Romanian*)
- Xosé M. (*Galician; Spanish*)
- 奈卜拉 (*Chinese Simplified*)
- borys_sh (*Ukrainian*)
- Miguel Mayol (*Spanish; Catalan*)
- Besnik_b (*Albanian*) - Besnik_b (*Albanian*)
- Thai Localization (*Thai*) - Emanuel Pina (emanuelpina) (*Portuguese*)
- Emanuel Pina (*Portuguese*) - Thai Localization (thl10n) (*Thai*)
- Jeong Arm (*Korean; Esperanto; Japanese*) - 奈卜拉 (nebula_moe) (*Chinese Simplified*)
- Imre Kristoffer Eilertsen (*Norwegian*) - Jeong Arm (Kjwon15) (*Japanese, Korean, Esperanto*)
- Danial Behzadi (*Persian*) - Michal Stanke (mstanke) (*Czech*)
- Osoitz (*Basque*) - Alix Rossi (palindromordnilap) (*French, Corsican*)
- Peterandre (*Norwegian Nynorsk; Norwegian*) - spla (*Spanish, Catalan*)
- Jeroen (*Dutch*) - Imre Kristoffer Eilertsen (DandelionSprout) (*Norwegian*)
- spla (*Catalan; Spanish*) - Jeroen (jeroenpraat) (*Dutch*)
- Iváns (*Galician*) - borys_sh (*Ukrainian*)
- Miguel Mayol (mitcoes) (*Spanish, Catalan*)
- Danial Behzadi (danialbehzadi) (*Persian*)
- yeft (*Chinese Traditional, Chinese Traditional, Hong Kong*)
- koyu (*German*) - koyu (*German*)
- Sasha Sorokin (*Russian; Vietnamese; Swedish; Catalan; Greek; Hungarian; Armenian; Albanian; Galician; French; Danish; German; Korean; Ukrainian*) - Koala Yeung (yookoala) (*Chinese Traditional, Hong Kong*)
- Osoitz (*Basque*)
- Peterandre (*Norwegian, Norwegian Nynorsk*)
- tzium (*Sardinian*)
- Iváns (Ivans_translator) (*Galician*)
- Sasha Sorokin (Sasha-Sorokin) (*French, Catalan, Danish, German, Greek, Hungarian, Armenian, Korean, Russian, Albanian, Swedish, Ukrainian, Vietnamese, Galician*)
- kamee (*Armenian*)
- tolstoevsky (*Russian*)
- enolp (*Asturian*) - enolp (*Asturian*)
- Masoud Abkenar (*Persian*) - FédiQuébec (manuelviens) (*French*)
- lamnatos (*Greek*) - lamnatos (*Greek*)
- Alix Rossi (*Corsican; French*) - Maya Minatsuki (mayaeh) (*Japanese*)
- Masoud Abkenar (mabkenar) (*Persian*)
- Alessandro Levati (Oct326) (*Italian*)
- arshat (*Kazakh*) - arshat (*Kazakh*)
- FédiQuébec (*French*)
- Marek Ľach (*Slovak; Polish*)
- Muha Aliss (*Turkish*)
- tolstoevsky (*Russian*)
- Emyn-Russell Nt Nefydd (*Welsh*)
- Aditoo17 (*Czech*)
- Maya Minatsuki (*Japanese*)
- ariasuni (*French; Esperanto*)
- Roboron (*Spanish*) - Roboron (*Spanish*)
- Alessandro Levati (*Italian*) - ariasuni (*French, Arabic, Czech, German, Greek, Hungarian, Slovenian, Ukrainian, Chinese Simplified, Portuguese, Brazilian, Persian, Norwegian Nynorsk, Esperanto, Breton, Corsican, Sardinian, Kabyle*)
- Ali Demirtaş (alidemirtas) (*Turkish*)
- Em St Cenydd (cancennau) (*Welsh*)
- Marek Ľach (mareklach) (*Polish, Slovak*)
- Muha Aliss (muhaaliss) (*Turkish*)
- Jurica (ahjk) (*Croatian*)
- Aditoo17 (*Czech*)
- Diluns (*Occitan*) - Diluns (*Occitan*)
- regulartranslator (*Portuguese, Brazilian*) - gagik_ (*Armenian*)
- vishnuvaratharajan (*Tamil*) - vishnuvaratharajan (*Tamil*)
- Marcin Mikołajczak (*Polish*) - Marcin Mikołajczak (mkljczkk) (*Czech, Polish, Russian*)
- Yi-Jyun Pan (*Chinese Traditional*) - regulartranslator (*Portuguese, Brazilian*)
- adrmzz (*Sardinian*) - Akarshan Biswas (biswasab) (*Bengali, Sanskrit*)
- Yi-Jyun Pan (pan93412) (*Chinese Traditional*)
- d5Ziif3K (*Ukrainian*) - d5Ziif3K (*Ukrainian*)
- GiorgioHerbie (*Italian*) - GiorgioHerbie (*Italian*)
- Rafael H L Moretti (Moretti) (*Portuguese, Brazilian*)
- Saederup92 (*Danish*)
- christalleras (*Norwegian Nynorsk*) - christalleras (*Norwegian Nynorsk*)
- cybergene (cyber-gene) (*Japanese*)
- Taloran (*Norwegian Nynorsk*) - Taloran (*Norwegian Nynorsk*)
- ThibG (*French; Icelandic*) - ThibG (*French, Icelandic*)
- Akarshan Biswas (*Bengali*) - xatier (*Chinese Traditional*)
- otrapersona (*Spanish, Spanish, Mexico*)
- atarashiako (*Chinese Simplified*) - atarashiako (*Chinese Simplified*)
- 101010 (*Polish*) - 101010 (101010pl) (*Polish*)
- silkevicious (*Italian*) - silkevicious (*Italian*)
- Bertil Hedkvist (*Swedish*) - Floxu (fredrikdim1) (*Norwegian Nynorsk*)
- cybergene (*Japanese*) - Bertil Hedkvist (Berrahed) (*Swedish*)
- William(ѕ)ⁿ (wmlgr) (*Spanish*)
- norayr (*Armenian*) - norayr (*Armenian*)
- William(ѕ)ⁿ (*Spanish*) - Tiago Epifânio (tfve) (*Portuguese*)
- Tiago Epifânio (*Portuguese*) - Ryo (DrRyo) (*Korean*)
- Mentor Gashi (*Albanian*) - Mentor Gashi (mentorgashi.com) (*Albanian*)
- Jaz-Michael King (*Welsh*) - Jaz-Michael King (jazmichaelking) (*Welsh*)
- carolinagiorno (*Portuguese, Brazilian*) - carolinagiorno (*Portuguese, Brazilian*)
- Roby Thomas (*Malayalam*) - Roby Thomas (roby.thomas) (*Malayalam*)
- Bharat Kumar (*Hindi*) - Bharat Kumar (Marwari) (*Hindi*)
- ThonyVezbe (*Breton*)
- dkdarshan760 (*Sanskrit*)
- Tagomago (tagomago) (*French, Spanish*)
- tykayn (*French*) - tykayn (*French*)
- axi (*Finnish*) - axi (*Finnish*)
- Selyan Slimane AMIRI (*Kabyle*) - Selyan Slimane AMIRI (slimane_AMIRI) (*Kabyle*)
- Balázs Meskó (mesko.balazs) (*Hungarian*)
- taoxvx (*Danish*) - taoxvx (*Danish*)
- Hrach Mkrtchyan (*Armenian*) - Hrach Mkrtchyan (mhrach87) (*Armenian*)
- sabri (*Spanish; Spanish, Argentina*) - sabri (thetomatoisavegetable) (*Spanish, Spanish, Argentina*)
- Dewi (*Breton; French*) - Dewi (Unkorneg) (*French, Breton*)
- Coelacanthus (*Chinese Simplified*)
- syncopams (*Chinese Simplified, Chinese Traditional, Chinese Traditional, Hong Kong*)
- SteinarK (*Norwegian Nynorsk*) - SteinarK (*Norwegian Nynorsk*)
- Mathias B. Vagnes (*Norwegian*) - Sokratis Alichanidis (alichani) (*Greek*)
- dashersyed (*Urdu*) - Mathias B. Vagnes (vagnes) (*Norwegian*)
- ThonyVezbe (*Breton*) - dashersyed (*Urdu (Pakistan)*)
- Acolyte (*Ukrainian*) - Acolyte (666noob404) (*Ukrainian*)
- Conight Wang (*Chinese Simplified*) - Conight Wang (xfddwhh) (*Chinese Simplified*)
- Damjan Dimitrioski (*Macedonian*) - liffon (*Swedish*)
- Damjan Dimitrioski (gnud) (*Macedonian*)
- PPNplus (*Thai*) - PPNplus (*Thai*)
- Tagomago (*Spanish; French*)
- shioko (*Chinese Simplified*) - shioko (*Chinese Simplified*)
- Balázs Meskó (*Hungarian*) - v4vachan (*Malayalam*)
- Evgeny Petrov (*Russian*) - Hakim Oubouali (zenata1) (*Standard Moroccan Tamazight*)
- Gwenn (*Breton*) - Evgeny Petrov (kondra007) (*Russian*)
- Ryo (*Korean*) - Gwenn (Belvar) (*Breton*)
- Rafael H L Moretti (*Portuguese, Brazilian*) - StanleyFrew (*French*)
- Hayk Khachatryan (brutusromanus123) (*Armenian*)
- jaranta (*Finnish*) - jaranta (*Finnish*)
- gagik_ (*Armenian*) - Felicia (midsommar) (*Swedish*)
- Felicia (*Swedish*) - Denys (dector) (*Ukrainian*)
- Jess Rafn (*Danish*) - Pukima (pukimaaa) (*German*)
- Stasiek Michalski (*Polish*)
- liffon (*Swedish*)
- dxwc (*Bengali*)
- Saederup92 (*Danish*)
- Vanege (*Esperanto*) - Vanege (*Esperanto*)
- Jess Rafn (therealyez) (*Danish*)
- strubbl (*German*)
- Stasiek Michalski (hellcp) (*Polish*)
- dxwc (*Bengali*)
- jmontane (*Catalan*) - jmontane (*Catalan*)
- Johan Schiff (*Swedish*) - Liboide (*Spanish*)
- Arunmozhi (*Tamil*) - Johan Schiff (schyffel) (*Swedish*)
- kat (*Ukrainian; Russian*) - Arunmozhi (tecoholic) (*Tamil*)
- Laura (*Polish*) - kat (katktv) (*Russian, Ukrainian*)
- oti4500 (*Hungarian; Ukrainian*) - Rikard Linde (rikardlinde) (*Swedish*)
- diazepan (*Spanish; Spanish, Argentina*) - oti4500 (*Hungarian, Ukrainian*)
- Sokratis Alichanidis (*Greek*) - Laura (selfisekai) (*Polish*)
- Rikard Linde (*Swedish*) - Rachida S. (ZiriSut) (*Kabyle*)
- Juan José Salvador Piedra (*Spanish*) - diazepan (*Spanish, Spanish, Argentina*)
- marzuquccen (*Kabyle*) - marzuquccen (*Kabyle*)
- BurekzFinezt (*Serbian*) - Juan José Salvador Piedra (JuanjoSalvador) (*Spanish*)
- Tigran (tigransimonyan) (*Armenian*)
- BurekzFinezt (*Serbian (Cyrillic)*)
- SHeija (*Finnish*) - SHeija (*Finnish*)
- Jack R (*Spanish*) - atriix (*Swedish*)
- andruhov (*Ukrainian; Russian*) - Jack R (isaac.97_WT) (*Spanish*)
- 森の子リスのミーコの大冒険 (*Japanese*) - antonyho (*Chinese Traditional, Hong Kong*)
- るいーね (*Japanese*) - andruhov (*Russian, Ukrainian*)
- Sam Tux (*Bengali*) - Aryamik Sharma (Aryamik) (*Swedish, Hindi*)
- phena109 (*Chinese Traditional, Hong Kong*)
- 森の子リスのミーコの大冒険 (Phroneris) (*Japanese*)
- るいーね (ruine) (*Japanese*)
- ahangarha (*Persian*)
- Sam Tux (imahbub) (*Bengali*)
- igordrozniak (*Polish*)
- Unmual (*Spanish*) - Unmual (*Spanish*)
- AW Unad (*Indonesian*) - Isaac Huang (caasih) (*Chinese Traditional*)
- Cutls (*Japanese*) - AW Unad (awcodify) (*Indonesian*)
- Ray (*Spanish*) - Allen Zhong (AstroProfundis) (*Chinese Simplified*)
- Falling Snowdin (*Vietnamese*) - Cutls (cutls) (*Japanese*)
- Andrea Lo Iacono (*Italian*) - Ray (Ipsumry) (*Spanish*)
- EPEMA (*German*) - Falling Snowdin (tghgg) (*Vietnamese*)
- Kinshuk Sunil (*Hindi*) - coxde (*Chinese Simplified*)
- Ullas Joseph (*Malayalam*) - Rasmus Lindroth (RasmusLindroth) (*Swedish*)
- Yu-Pai Liu (*Chinese Traditional*) - Andrea Lo Iacono (niels0n) (*Italian*)
- Amarin Cemthong (*Thai*) - Kinshuk Sunil (kinshuksunil) (*Hindi*)
- juanda097 (*Spanish*) - Ullas Joseph (ullasjoseph) (*Malayalam*)
- Goudarz Jafari (Goudarz) (*Persian*)
- Yu-Pai Liu (tedliou) (*Chinese Traditional*)
- Amarin Cemthong (acitmaster) (*Thai*)
- juanda097 (juanda-097) (*Spanish*)
- Anunnakey (*Macedonian*) - Anunnakey (*Macedonian*)
- StanleyFrew (*French*) - fragola (*Italian*)
- erikstl (*Esperanto*) - erikstl (*Esperanto*)
- twpenguin (*Chinese Traditional*)
- bobchao (*Chinese Traditional*)
- Esther (esthermations) (*Portuguese*)
- MadeInSteak (*Finnish*) - MadeInSteak (*Finnish*)
- Heimen Stoffels (*Dutch*) - Heimen Stoffels (vistausss) (*Dutch*)
- Rajarshi Guha (*Bengali*) - Rajarshi Guha (rajarshiguha) (*Bengali*)
- Andrew (*Romanian*) - Andrew (iAndrew3) (*Romanian*)
- Goudarz Jafari (*Persian*) - Gopal Sharma (gopalvirat) (*Hindi*)
- arethsu (*Swedish*) - arethsu (*Swedish*)
- Carlos Solís (*Esperanto*) - Tofiq Abdula (Xwla) (*Sorani (Kurdish)*)
- Parthan S Ramanujam (*Tamil*) - Carlos Solís (csolisr) (*Esperanto*)
- Ali Demirtaş (*Turkish*) - Parthan S Ramanujam (parthan) (*Tamil*)
- Kasper Nymand (*Danish*) - Kasper Nymand (KasperNymand) (*Danish*)
- TS (*Finnish*) - TS (morte) (*Finnish*)
- subram (*Turkish*)
- SensDeViata (*Ukrainian*) - SensDeViata (*Ukrainian*)
- Ptrcmd (ptrcmd) (*Chinese Traditional*)
- SergioFMiranda (*Portuguese, Brazilian*) - SergioFMiranda (*Portuguese, Brazilian*)
- OctolinGamer (*Portuguese, Brazilian*) - Scvoet (scvoet) (*Chinese Simplified*)
- hiroTS (*Chinese Traditional*)
- johne32rus23 (*Russian*)
- AzureNya (*Chinese Simplified*) - AzureNya (*Chinese Simplified*)
- Ram varma (*Tamil*) - OctolinGamer (octolingamer) (*Portuguese, Brazilian*)
- 北䑓如法 (*Japanese*) - Ram varma (ram4varma) (*Tamil*)
- Hexandcube (hexandcube) (*Polish*)
- 北䑓如法 (Nyoho) (*Japanese*)
- frumble (*German*) - frumble (*German*)
- kekkepikkuni (*Tamil*) - kekkepikkuni (*Tamil*)
- Neo_Chen (NeoChen1024) (*Chinese Traditional*)
- oorsutri (*Tamil*) - oorsutri (*Tamil*)
- Nithin V (*Tamil*) - Rhys Harrison (rhedders) (*Esperanto*)
- Miro Rauhala (*Finnish*) - Nithin V (Nithin896) (*Tamil*)
- Miro Rauhala (mirorauhala) (*Finnish*)
- diorama (*Italian*) - diorama (*Italian*)
- Rhys Harrison (*Esperanto*) - AlexKoala (alexkoala) (*Korean*)
- Guillaume Turchini (*French*) - Aswin C (officialcjunior) (*Malayalam*)
- Ganesh D (*Marathi*) - Guillaume Turchini (orion78fr) (*French*)
- Ganesh D (auntgd) (*Marathi*)
- dragnucs2 (*Arabic*) - dragnucs2 (*Arabic*)
- Pedro Henrique (*Portuguese, Brazilian*) - Ryan Ho (koungho) (*Chinese Traditional*)
- Tejas Harad (*Marathi*) - Pedro Henrique (exploronauta) (*Portuguese, Brazilian*)
- Vasanthan (*Tamil*) - Tejas Harad (h_tejas) (*Marathi*)
- 硫酸鶏 (*Japanese*) - Vasanthan (vasanthan) (*Tamil*)
- 硫酸鶏 (acid_chicken) (*Japanese*)
- clarmin b8 (clarminb8) (*Sorani (Kurdish)*)
- manukp (*Malayalam*) - manukp (*Malayalam*)
- psymyn (*Hebrew*) - psymyn (*Hebrew*)
- earth dweller (*Marathi*) - earth dweller (sanethoughtyt) (*Marathi*)
- meijerivoi (*Finnish*) - meijerivoi (toilet) (*Finnish*)
- essaar (*Tamil*) - essaar (*Tamil*)
- serubeena (*Swedish*) - serubeena (*Swedish*)
- Karol Kosek (krkkPL) (*Polish*)
- Rintan (*Japanese*) - Rintan (*Japanese*)
- Karol Kosek (*Polish*)
- valarivan (*Tamil*) - valarivan (*Tamil*)
- Sebastián Andil (*Slovak*) - Hernik (hernik27) (*Czech*)
- v4vachan (*Malayalam*) - Sebastián Andil (Selrond) (*Slovak*)
- KEINOS (*Japanese*) - Hinaloe (hinaloe) (*Japanese*)
- Ivan T. (*Chinese Traditional, Hong Kong*)
- filippodb (*Italian*) - filippodb (*Italian*)
- Balázs Meskó (*Hungarian*) - KEINOS (*Japanese*)
- Balázs Meskó (meskobalazs) (*Hungarian*)
- Bottle (suryasalem2010) (*Tamil*)
- JzshAC (*Chinese Simplified*) - JzshAC (*Chinese Simplified*)
- Bottle (*Tamil*) - Wrya ali (John12) (*Sorani (Kurdish)*)
- Khóo (*Chinese Traditional*) - Khóo (khootiatling) (*Chinese Traditional*)
- Steven Tappert (*German*) - Steven Tappert (sammy8806) (*German*)
- Antillion (*Spanish*) - Antillion (antillion99) (*Spanish*)
- ZiriSut (*Kabyle*) - Pukima (Pukimaa) (*German*)
- gowthamanb (*Tamil*) - Reg3xp (*Persian*)
- hiphipvargas (*Portuguese*) - hiphipvargas (*Portuguese*)
- Arttu Ylhävuori (*Finnish*) - gowthamanb (*Tamil*)
- Ch. (*Korean*) - Ch. (sftblw) (*Korean*)
- Jeff Huang (s8321414) (*Chinese Traditional*)
- Arttu Ylhävuori (arttu.ylhavuori) (*Finnish*)
- tctovsli (*Norwegian Nynorsk*) - tctovsli (*Norwegian Nynorsk*)
- Hinaloe (*Japanese*) - Timo Tijhof (Krinkle) (*Dutch*)
- strubbl (*German*) - Yamagishi Kazutoshi (ykzts) (*Japanese, Icelandic, Sorani (Kurdish)*)
- vjasiegd (*Polish*) - vjasiegd (*Polish*)
- SamitiMed (*Thai*) - SamitiMed (samiti3d) (*Thai*)
- Reg3xp (*Persian*) - Rekan Adl (rekan-adl1) (*Sorani (Kurdish)*)
- AlexKoala (*Korean*)
- umelard (*Hebrew*) - umelard (*Hebrew*)
- Antara2Cinta (Se7enTime) (*Indonesian*)
- VSx86 (*Russian*) - VSx86 (*Russian*)
- Daniel Dimitrov (*Bulgarian*) - Daniel Dimitrov (danny-dimitrov) (*Bulgarian*)
- mynameismonkey (*Welsh*)
- parnikkapore (*Thai*) - parnikkapore (*Thai*)
- Mo_der Steven (*Chinese Simplified*) - mynameismonkey (*Welsh*)
- Sherwan Othman (sherwanothman11) (*Sorani (Kurdish)*)
- Yassine Aït-El-Mouden (yaitelmouden) (*Standard Moroccan Tamazight*)
- SKELET (*Danish*) - SKELET (*Danish*)
- Renato "Lond" Cerqueira (*Portuguese, Brazilian*) - Mo_der Steven (SakuraPuare) (*Chinese Simplified*)
- Fei Yang (Fei1Yang) (*Chinese Traditional*)
- ALEM FARID (faridatcemlulaqbayli) (*Kabyle*)
- enipra (*Armenian*) - enipra (*Armenian*)
- musix (*Persian*) - musix (*Persian*)
- ギャラ (*Chinese Simplified; Japanese*) - Renato "Lond" Cerqueira (renatolond) (*Portuguese, Brazilian*)
- ALEM FARID (*Kabyle*) - ギャラ (gyara) (*Japanese, Chinese Simplified*)
- Hougo (hougo) (*French*)
- ybardapurkar (*Marathi*) - ybardapurkar (*Marathi*)
- Adrián Lattes (*Spanish*) - Adrián Lattes (haztecaso) (*Spanish*)
- TracyJacks (*Chinese Simplified*)
- rasheedgm (*Kannada*) - rasheedgm (*Kannada*)
- GatoOscuro (*Spanish*)
- mecqor labi (mecqorlabi) (*Persian*)
- Belkacem Mohammed (belkacem77) (*Kabyle*)
- Navjot Singh (nspeaks) (*Hindi*)
- omquylzu (*Latvian*) - omquylzu (*Latvian*)
- Belkacem Mohammed (*Kabyle*)
- Navjot Singh (*Hindi*)
- Ozai (*German*) - Ozai (*German*)
- Sahak Petrosyan (*Armenian*) - Sahak Petrosyan (petrosyan) (*Armenian*)
- siamano (*Thai; Esperanto*) - siamano (*Thai, Esperanto*)
- se7entime (*Indonesian*) - Viorel-Cătălin Răpițeanu (rapiteanu) (*Romanian*)
- Viorel-Cătălin Răpițeanu (*Romanian*) - Siddhartha Sarathi Basu (quinoa_biryani) (*Bengali*)
- Siddhartha Sarathi Basu (*Bengali*) - Pachara Chantawong (pachara2202) (*Thai*)
- Pachara Chantawong (*Thai*) - mkljczk (*Polish*)
- Skew (*French*) - Skew (noan.perrot) (*French*)
- Zijian Zhao (*Chinese Simplified*) - Zijian Zhao (jobs2512821228) (*Chinese Simplified*)
- Guru Prasath Anandapadmanaban (*Tamil*)
- turtle836 (*German*) - turtle836 (*German*)
- GatoOscuro (*Spanish*) - Guru Prasath Anandapadmanaban (guruprasath) (*Tamil*)
- Lamin (*Japanese*) - Lamin (laminne) (*Japanese*)
- Marcepanek_ (*Polish*) - Marcepanek_ (thekingmarcepan) (*Polish*)
- Yann Aguettaz (*French*) - Feruz Oripov (FeruzOripov) (*Russian*)
- Feruz Oripov (*Russian*) - Yann Aguettaz (yann-a) (*French*)
- Mick Onio (*Asturian*) - Mick Onio (xgc.redes) (*Asturian*)
- hg6 (*Hindi*) - Tianqi Zhang (tina.zhang040609) (*Chinese Simplified*)
- Malik Mann (*German*) - Malik Mann (dermalikmann) (*German*)
- padulafacundo (*Spanish*) - dadosch (*German*)
- r3dsp1 (*Chinese Traditional, Hong Kong*) - r3dsp1 (*Chinese Traditional, Hong Kong*)
- Tianqi Zhang (*Chinese Simplified*) - padulafacundo (*Spanish*)
- Padraic Calpin (*Slovenian*) - hg6 (*Hindi*)
- cenegd (*Chinese Simplified*) - Orlando Murcio (Atos20) (*Spanish, Mexico*)
- piupiupiudiu (*Chinese Simplified*) - piupiupiudiu (*Chinese Simplified*)
- Hugh Liu (*Chinese Simplified*) - shdy (*German*)
- Rakino (*Chinese Simplified*) - Padraic Calpin (padraic-padraic) (*Slovenian*)
- Jothipazhani Nagarajan (*Tamil*) - Ильзира Рахматуллина (rahmatullinailzira53) (*Tatar*)
- Miquel Sabaté Solà (*Catalan*) - cenegd (*Chinese Simplified*)
- Hugh Liu (youloveonlymeh) (*Chinese Simplified*)
- Pixelcode (realpixelcode) (*German*)
- Yogesh K S (yogi) (*Kannada*)
- Rakino (rakino) (*Chinese Simplified*)
- Miquel Sabaté Solà (mssola) (*Catalan*)
- AmazighNM (*Kabyle*) - AmazighNM (*Kabyle*)
- Solid Rhino (*Dutch*) - Jothipazhani Nagarajan (jothipazhani.n) (*Tamil*)
- Clash Clans (KURD12345) (*Sorani (Kurdish)*)
- hallomaurits (*Dutch*) - hallomaurits (*Dutch*)
- alnd hezh (alndhezh) (*Sorani (Kurdish)*)
- Solid Rhino (SolidRhino) (*Dutch*)
- k_taka (peaceroad) (*Japanese*)
- Hallo Abdullah (hallo_hamza12) (*Sorani (Kurdish)*)
- hussama (*Portuguese, Brazilian*) - hussama (*Portuguese, Brazilian*)
- shafouz (*Portuguese, Brazilian*) - Sébastien Feugère (smonff) (*French*)
- Tagada (*French*) - 林水溶 (shuiRong) (*Chinese Simplified*)
- Tom_ (*Czech*)
- SnDer (*Dutch*)
- eichkat3r (*German*) - eichkat3r (*German*)
- PifyZ (*French*)
- OminousCry (*Russian*) - OminousCry (*Russian*)
- Shrinivasan T (*Tamil*) - SnDer (*Dutch*)
- Nathaël Noguès (*French*) - PifyZ (*French*)
- Daniel M. (*Catalan*) - Tom_ (*Czech*)
- Swati Sani (*Urdu*) - Tagada (Tagadda) (*French*)
- Kk (*Kannada*) - shafouz (*Portuguese, Brazilian*)
- Kahina Mess (K_hina) (*Kabyle*)
- Nathaël Noguès (NatNgs) (*French*)
- Kk (kishorkumara3) (*Kannada*)
- Swati Sani (swatisani) (*Urdu (Pakistan)*)
- Shrinivasan T (tshrinivasan) (*Tamil*)
- さっかりんにーさん (saccharin23) (*Japanese*)
- 夜楓Yoka (Yoka2627) (*Chinese Simplified*)
- Daniel M. (daniconil) (*Catalan*)
- Vikatakavi (*Kannada*)
- SusVersiva (*Catalan*) - SusVersiva (*Catalan*)
- Robin van der Vliet (*Esperanto*) - Tradjincal (tradjincal) (*French*)
- pullopen (*Chinese Simplified*)
- Robin van der Vliet (RobinvanderVliet) (*Esperanto*)
- Zinkokooo (*Basque*) - Zinkokooo (*Basque*)
- Tradjincal (*French*)
- Vikatakavi (*Kannada*)
- prabhjot (*Hindi*)
- twpenguin (*Chinese Traditional*)
- mmokhi (*Persian*) - mmokhi (*Persian*)
- Livingston Samuel (livingston) (*Tamil*)
- prabhjot (*Hindi*)
- sergioaraujo1 (*Portuguese, Brazilian*) - sergioaraujo1 (*Portuguese, Brazilian*)
- Livingston Samuel (*Tamil*) - CyberAmoeba (pseudoobscura) (*Chinese Simplified*)
- tsundoker (*Malayalam*) - tsundoker (*Malayalam*)
- skaaarrr (*German*) - skaaarrr (*German*)
- 夜楓Yoka (*Chinese Simplified*) - Ricardo Colin (rysard) (*Spanish*)
- kiwi0 (*Italian*) - mkljczk (mykylyjczyk) (*Polish*)
- Philipp Fischbeck (PFischbeck) (*German*)
- fedot (*Russian*) - fedot (*Russian*)
- mkljczk (*Polish*) - Paz Galindo (paz.almendra.g) (*Spanish*)
- igordrozniak (*Polish*) - GaggiX (*Italian*)
- Ricardo Colin (*Spanish*)
- Esther (*Portuguese*)
- Paz Galindo (*Spanish*)
- Philipp Fischbeck (*German*)
- ralozkolya (*Georgian*) - ralozkolya (*Georgian*)
- JackXu (*Chinese Simplified*) - Zoé Bőle (zoe1337) (*German*)
- Allen Zhong (*Chinese Simplified*) - Lukas Fülling (lfuelling) (*German*)
- Zoé Bőle (*German*) - JackXu (Merman-Jack) (*Chinese Simplified*)
- Lukas Fülling (*German*) - Aymeric (AymBroussier) (*French*)
- Albatroz Jeremias (*Portuguese*) - Anoop (anoopp) (*Malayalam*)
- Samir Tighzert (*Kabyle*)
- Nocta (*French*)
- Anoop (*Malayalam*)
- pezcurrel (*Italian*) - pezcurrel (*Italian*)
- Dremski (*Bulgarian*) - Dremski (*Bulgarian*)
- Aymeric (*French*) - Xurxo Guerra (xguerrap) (*Galician*)
- tamaina (*Japanese*) - mashirozx (*Chinese Simplified*)
- Doug (*Portuguese, Brazilian*) - Albatroz Jeremias (albjeremias) (*Portuguese*)
- Matias Lavik (*Norwegian Nynorsk*) - Samir Tighzert (samir_t7) (*Kabyle*)
- Fleva (*Sardinian*) - Apple (blackteaovo) (*Chinese Simplified*)
- Nocta (*French*)
- OpenAlgeria (*Arabic*) - OpenAlgeria (*Arabic*)
- koppe-pan (*Japanese*) - tamaina (*Japanese*)
- Amith Raj Shetty (*Kannada*) - abidin toumi (Zet24) (*Arabic*)
- xpac1985 (xpac) (*German*)
- Kaede (kaedech) (*Japanese*)
- ÀŘǾŚ PÀŚĦÀÍ (arospashai) (*Sorani (Kurdish)*)
- Matias Lavik (matiaslavik) (*Norwegian Nynorsk*)
- smedvedev (*Russian*) - smedvedev (*Russian*)
- Trond Boksasp (*Norwegian*) - mikel (mikelalas) (*Spanish*)
- Doug (douglasalvespe) (*Portuguese, Brazilian*)
- Trond Boksasp (boksasp) (*Norwegian*)
- Fleva (*Sardinian*)
- Mohammad Adnan Mahmood (adnanmig) (*Arabic*)
- Sais Lakshmanan (Saislakshmanan) (*Tamil*)
- Amith Raj Shetty (amithraj1989) (*Kannada*)
- random_person (*Spanish*) - random_person (*Spanish*)
- Sais Lakshmanan (*Tamil*) - djoerd (*Dutch*)
- mikel (*Spanish*) - Baban Abdulrahman (baban.abdulrehman) (*Sorani (Kurdish)*)
- Mohammad Adnan Mahmood (*Arabic*) - ebrezhoneg (*Breton*)
- dashty (*Sorani (Kurdish)*)
- Salh_haji6 (*Sorani (Kurdish)*)
- Amir Kurdo (kuraking202) (*Sorani (Kurdish)*)
- おさ (osapon) (*Japanese*)
- Ranj A Abdulqadir (RanjAhmed) (*Sorani (Kurdish)*)
- umonaca (*Chinese Simplified*)
- Bartek Fijałkowski (brateq) (*Polish*)
- tateisu (*Japanese*)
- centumix (*Japanese*)
- Jari Ronkainen (ronchaine) (*Finnish*)
- Savarín Electrográfico Marmota Intergalactica (herrero.maty) (*Spanish*)
- Torsten Högel (torstenhoegel) (*German*)
- Abijeet Patro (Abijeet) (*Basque*)
- Ács Zoltán (acszoltan111) (*Hungarian*)
- Benjamin Cobb (benjamincobb) (*German*)
- waweic (*German*)
- Aries (orlea) (*Japanese*)
- silverscat_3 (SilversCat) (*Japanese*)
- kavitha129 (*Tamil*)
- dcapillae (*Spanish*)
- SamOak (*Portuguese, Brazilian*)
- capiscuas (*Spanish*)
- NeverMine17 (*Russian*)
- Nithya Mary (nithyamary25) (*Tamil*)
- t_aus_m (*German*)
- dobrado (*Portuguese, Brazilian*)
- Hannah (Aniqueper1) (*Chinese Simplified*)
- Jiniux (*Italian*)
- 于晚霞 (xissshawww) (*Chinese Simplified*)

@ -3,7 +3,7 @@ Changelog
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
## Unreleased ## [3.3.0] - 2020-12-27
### Added ### Added
- **Add hotkeys for audio/video control in web UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/15158), [Gargron](https://github.com/tootsuite/mastodon/pull/15198)) - **Add hotkeys for audio/video control in web UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/15158), [Gargron](https://github.com/tootsuite/mastodon/pull/15198))
@ -81,11 +81,11 @@ All notable changes to this project will be documented in this file.
### Changed ### Changed
- **Change media modals look in web UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/15217), [Gargron](https://github.com/tootsuite/mastodon/pull/15221), [Gargron](https://github.com/tootsuite/mastodon/pull/15284), [Gargron](https://github.com/tootsuite/mastodon/pull/15283), [Kjwon15](https://github.com/tootsuite/mastodon/pull/15308), [noellabo](https://github.com/tootsuite/mastodon/pull/15305)) - **Change media modals look in web UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/15217), [Gargron](https://github.com/tootsuite/mastodon/pull/15221), [Gargron](https://github.com/tootsuite/mastodon/pull/15284), [Gargron](https://github.com/tootsuite/mastodon/pull/15283), [Kjwon15](https://github.com/tootsuite/mastodon/pull/15308), [noellabo](https://github.com/tootsuite/mastodon/pull/15305), [ThibG](https://github.com/tootsuite/mastodon/pull/15417))
- Background of the overlay matches the color of the image - Background of the overlay matches the color of the image
- Action bar to interact with or open the toot from the modal - Action bar to interact with or open the toot from the modal
- Change order of announcements in admin UI to be newest-first ([ThibG](https://github.com/tootsuite/mastodon/pull/15091)) - Change order of announcements in admin UI to be newest-first ([ThibG](https://github.com/tootsuite/mastodon/pull/15091))
- **Change account suspensions to be reversible by default** ([Gargron](https://github.com/tootsuite/mastodon/pull/14726), [ThibG](https://github.com/tootsuite/mastodon/pull/15152), [ThibG](https://github.com/tootsuite/mastodon/pull/15106), [ThibG](https://github.com/tootsuite/mastodon/pull/15100), [ThibG](https://github.com/tootsuite/mastodon/pull/15099), [noellabo](https://github.com/tootsuite/mastodon/pull/14855), [ThibG](https://github.com/tootsuite/mastodon/pull/15380)) - **Change account suspensions to be reversible by default** ([Gargron](https://github.com/tootsuite/mastodon/pull/14726), [ThibG](https://github.com/tootsuite/mastodon/pull/15152), [ThibG](https://github.com/tootsuite/mastodon/pull/15106), [ThibG](https://github.com/tootsuite/mastodon/pull/15100), [ThibG](https://github.com/tootsuite/mastodon/pull/15099), [noellabo](https://github.com/tootsuite/mastodon/pull/14855), [ThibG](https://github.com/tootsuite/mastodon/pull/15380), [Gargron](https://github.com/tootsuite/mastodon/pull/15420), [Gargron](https://github.com/tootsuite/mastodon/pull/15414))
- Suspensions no longer equal deletions - Suspensions no longer equal deletions
- A suspended account can be unsuspended with minimal consequences for 30 days - A suspended account can be unsuspended with minimal consequences for 30 days
- Immediate deletion of data is still available as an explicit option - Immediate deletion of data is still available as an explicit option
@ -123,7 +123,7 @@ All notable changes to this project will be documented in this file.
### Fixed ### Fixed
- Fix layout on about page when contact account has a long username ([ThibG](https://github.com/tootsuite/mastodon/pull/15357)) - Fix layout on about page when contact account has a long username ([ThibG](https://github.com/tootsuite/mastodon/pull/15357))
- Fix follow limit preventing re-following of a moved account ([Gargron](https://github.com/tootsuite/mastodon/pull/14207)) - Fix follow limit preventing re-following of a moved account ([Gargron](https://github.com/tootsuite/mastodon/pull/14207), [ThibG](https://github.com/tootsuite/mastodon/pull/15384))
- **Fix deletes not reaching every server that interacted with toot** ([Gargron](https://github.com/tootsuite/mastodon/pull/15200)) - **Fix deletes not reaching every server that interacted with toot** ([Gargron](https://github.com/tootsuite/mastodon/pull/15200))
- Previously, delete of a toot would be primarily sent to the followers of its author, people mentioned in the toot, and people who reblogged the toot - Previously, delete of a toot would be primarily sent to the followers of its author, people mentioned in the toot, and people who reblogged the toot
- Now, additionally, it is ensured that it is sent to people who replied to it, favourited it, and to the person it replies to even if that person is not mentioned - Now, additionally, it is ensured that it is sent to people who replied to it, favourited it, and to the person it replies to even if that person is not mentioned
@ -163,7 +163,7 @@ All notable changes to this project will be documented in this file.
- Fix inefficiency when fetching bookmarks ([akihikodaki](https://github.com/tootsuite/mastodon/pull/14674)) - Fix inefficiency when fetching bookmarks ([akihikodaki](https://github.com/tootsuite/mastodon/pull/14674))
- Fix inefficiency when fetching favourites ([akihikodaki](https://github.com/tootsuite/mastodon/pull/14673)) - Fix inefficiency when fetching favourites ([akihikodaki](https://github.com/tootsuite/mastodon/pull/14673))
- Fix inefficiency when fetching media-only account timeline ([akihikodaki](https://github.com/tootsuite/mastodon/pull/14675)) - Fix inefficiency when fetching media-only account timeline ([akihikodaki](https://github.com/tootsuite/mastodon/pull/14675))
- Fix inefficieny when deleting accounts ([Gargron](https://github.com/tootsuite/mastodon/pull/15387), [ThibG](https://github.com/tootsuite/mastodon/pull/15409), [ThibG](https://github.com/tootsuite/mastodon/pull/15407), [ThibG](https://github.com/tootsuite/mastodon/pull/15408), [ThibG](https://github.com/tootsuite/mastodon/pull/15402)) - Fix inefficieny when deleting accounts ([Gargron](https://github.com/tootsuite/mastodon/pull/15387), [ThibG](https://github.com/tootsuite/mastodon/pull/15409), [ThibG](https://github.com/tootsuite/mastodon/pull/15407), [ThibG](https://github.com/tootsuite/mastodon/pull/15408), [ThibG](https://github.com/tootsuite/mastodon/pull/15402), [ThibG](https://github.com/tootsuite/mastodon/pull/15416), [Gargron](https://github.com/tootsuite/mastodon/pull/15421))
- Fix redundant query when processing batch actions on custom emojis ([niwatori24](https://github.com/tootsuite/mastodon/pull/14534)) - Fix redundant query when processing batch actions on custom emojis ([niwatori24](https://github.com/tootsuite/mastodon/pull/14534))
- Fix slow distinct queries where grouped queries are faster ([Gargron](https://github.com/tootsuite/mastodon/pull/15287)) - Fix slow distinct queries where grouped queries are faster ([Gargron](https://github.com/tootsuite/mastodon/pull/15287))
- Fix performance on instances list in admin UI ([Gargron](https://github.com/tootsuite/mastodon/pull/15282)) - Fix performance on instances list in admin UI ([Gargron](https://github.com/tootsuite/mastodon/pull/15282))
@ -387,14 +387,14 @@ All notable changes to this project will be documented in this file.
- Only then proceed to start removing their data (slow) - Only then proceed to start removing their data (slow)
- Clear out media attachments in a separate worker (slow) - Clear out media attachments in a separate worker (slow)
## [v3.1.5] - 2020-07-07 ## [3.1.5] - 2020-07-07
### Security ### Security
- Fix media attachment enumeration ([ThibG](https://github.com/tootsuite/mastodon/pull/14254)) - Fix media attachment enumeration ([ThibG](https://github.com/tootsuite/mastodon/pull/14254))
- Change rate limits for various paths ([Gargron](https://github.com/tootsuite/mastodon/pull/14253)) - Change rate limits for various paths ([Gargron](https://github.com/tootsuite/mastodon/pull/14253))
- Fix other sessions not being logged out on password change ([Gargron](https://github.com/tootsuite/mastodon/pull/14252)) - Fix other sessions not being logged out on password change ([Gargron](https://github.com/tootsuite/mastodon/pull/14252))
## [v3.1.4] - 2020-05-14 ## [3.1.4] - 2020-05-14
### Added ### Added
- Add `vi` to available locales ([taicv](https://github.com/tootsuite/mastodon/pull/13542)) - Add `vi` to available locales ([taicv](https://github.com/tootsuite/mastodon/pull/13542))
@ -461,7 +461,7 @@ All notable changes to this project will be documented in this file.
- For apps that self-register on behalf of every individual user (such as most mobile apps), this is a non-issue - For apps that self-register on behalf of every individual user (such as most mobile apps), this is a non-issue
- The issue only affects developers of apps who are shared between multiple users, such as server-side apps like cross-posters - The issue only affects developers of apps who are shared between multiple users, such as server-side apps like cross-posters
## [v3.1.3] - 2020-04-05 ## [3.1.3] - 2020-04-05
### Added ### Added
- Add ability to filter audit log in admin UI ([Gargron](https://github.com/tootsuite/mastodon/pull/13381)) - Add ability to filter audit log in admin UI ([Gargron](https://github.com/tootsuite/mastodon/pull/13381))

@ -5,7 +5,7 @@ ruby '>= 2.5.0', '< 3.0.0'
gem 'pkg-config', '~> 1.4' gem 'pkg-config', '~> 1.4'
gem 'puma', '~> 5.0' gem 'puma', '~> 5.1'
gem 'rails', '~> 5.2.4.4' gem 'rails', '~> 5.2.4.4'
gem 'sprockets', '~> 3.7.2' gem 'sprockets', '~> 3.7.2'
gem 'thor', '~> 1.0' gem 'thor', '~> 1.0'
@ -17,7 +17,7 @@ gem 'makara', '~> 0.4'
gem 'pghero', '~> 2.7' gem 'pghero', '~> 2.7'
gem 'dotenv-rails', '~> 2.7' gem 'dotenv-rails', '~> 2.7'
gem 'aws-sdk-s3', '~> 1.85', require: false gem 'aws-sdk-s3', '~> 1.87', require: false
gem 'fog-core', '<= 2.1.0' gem 'fog-core', '<= 2.1.0'
gem 'fog-openstack', '~> 0.3', require: false gem 'fog-openstack', '~> 0.3', require: false
gem 'paperclip', '~> 6.0' gem 'paperclip', '~> 6.0'
@ -32,7 +32,7 @@ gem 'browser'
gem 'charlock_holmes', '~> 0.7.7' gem 'charlock_holmes', '~> 0.7.7'
gem 'iso-639' gem 'iso-639'
gem 'chewy', '~> 5.1' gem 'chewy', '~> 5.1'
gem 'cld3', '~> 3.3.0' gem 'cld3', '~> 3.4.1'
gem 'devise', '~> 4.7' gem 'devise', '~> 4.7'
gem 'devise-two-factor', '~> 3.1' gem 'devise-two-factor', '~> 3.1'
@ -40,7 +40,7 @@ group :pam_authentication, optional: true do
gem 'devise_pam_authenticatable2', '~> 9.2' gem 'devise_pam_authenticatable2', '~> 9.2'
end end
gem 'net-ldap', '~> 0.16' gem 'net-ldap', '~> 0.17'
gem 'omniauth-cas', '~> 2.0' gem 'omniauth-cas', '~> 2.0'
gem 'omniauth-saml', '~> 1.10' gem 'omniauth-saml', '~> 1.10'
gem 'omniauth', '~> 1.9' gem 'omniauth', '~> 1.9'
@ -64,10 +64,10 @@ gem 'kaminari', '~> 1.2'
gem 'link_header', '~> 0.0' gem 'link_header', '~> 0.0'
gem 'mime-types', '~> 3.3.1', require: 'mime/types/columnar' gem 'mime-types', '~> 3.3.1', require: 'mime/types/columnar'
gem 'nilsimsa', git: 'https://github.com/witgo/nilsimsa', ref: 'fd184883048b922b176939f851338d0a4971a532' gem 'nilsimsa', git: 'https://github.com/witgo/nilsimsa', ref: 'fd184883048b922b176939f851338d0a4971a532'
gem 'nokogiri', '~> 1.10' gem 'nokogiri', '~> 1.11'
gem 'nsa', '~> 0.2' gem 'nsa', '~> 0.2'
gem 'oj', '~> 3.10' gem 'oj', '~> 3.10'
gem 'ox', '~> 2.13' gem 'ox', '~> 2.14'
gem 'parslet' gem 'parslet'
gem 'parallel', '~> 1.20' gem 'parallel', '~> 1.20'
gem 'posix-spawn' gem 'posix-spawn'
@ -79,8 +79,8 @@ gem 'rails-i18n', '~> 5.1'
gem 'rails-settings-cached', '~> 0.6' gem 'rails-settings-cached', '~> 0.6'
gem 'redis', '~> 4.2', require: ['redis', 'redis/connection/hiredis'] gem 'redis', '~> 4.2', require: ['redis', 'redis/connection/hiredis']
gem 'mario-redis-lock', '~> 1.2', require: 'redis_lock' gem 'mario-redis-lock', '~> 1.2', require: 'redis_lock'
gem 'rqrcode', '~> 1.1' gem 'rqrcode', '~> 1.2'
gem 'ruby-progressbar', '~> 1.10' gem 'ruby-progressbar', '~> 1.11'
gem 'sanitize', '~> 5.2' gem 'sanitize', '~> 5.2'
gem 'scenic', '~> 1.5' gem 'scenic', '~> 1.5'
gem 'sidekiq', '~> 6.1' gem 'sidekiq', '~> 6.1'
@ -92,7 +92,7 @@ gem 'simple_form', '~> 5.0'
gem 'sprockets-rails', '~> 3.2', require: 'sprockets/railtie' gem 'sprockets-rails', '~> 3.2', require: 'sprockets/railtie'
gem 'stoplight', '~> 2.2.1' gem 'stoplight', '~> 2.2.1'
gem 'strong_migrations', '~> 0.7' gem 'strong_migrations', '~> 0.7'
gem 'tty-prompt', '~> 0.22', require: false gem 'tty-prompt', '~> 0.23', require: false
gem 'twitter-text', '~> 1.14' gem 'twitter-text', '~> 1.14'
gem 'tzinfo-data', '~> 1.2020' gem 'tzinfo-data', '~> 1.2020'
gem 'webpacker', '~> 5.2' gem 'webpacker', '~> 5.2'
@ -119,14 +119,14 @@ group :production, :test do
end end
group :test do group :test do
gem 'capybara', '~> 3.33' gem 'capybara', '~> 3.34'
gem 'climate_control', '~> 0.2' gem 'climate_control', '~> 0.2'
gem 'faker', '~> 2.14' gem 'faker', '~> 2.15'
gem 'microformats', '~> 4.2' gem 'microformats', '~> 4.2'
gem 'rails-controller-testing', '~> 1.0' gem 'rails-controller-testing', '~> 1.0'
gem 'rspec-sidekiq', '~> 3.1' gem 'rspec-sidekiq', '~> 3.1'
gem 'simplecov', '~> 0.19', require: false gem 'simplecov', '~> 0.21', require: false
gem 'webmock', '~> 3.10' gem 'webmock', '~> 3.11'
gem 'parallel_tests', '~> 3.4' gem 'parallel_tests', '~> 3.4'
gem 'rspec_junit_formatter', '~> 0.4' gem 'rspec_junit_formatter', '~> 0.4'
end end
@ -140,8 +140,8 @@ group :development do
gem 'letter_opener', '~> 1.7' gem 'letter_opener', '~> 1.7'
gem 'letter_opener_web', '~> 1.4' gem 'letter_opener_web', '~> 1.4'
gem 'memory_profiler' gem 'memory_profiler'
gem 'rubocop', '~> 1.3', require: false gem 'rubocop', '~> 1.7', require: false
gem 'rubocop-rails', '~> 2.8', require: false gem 'rubocop-rails', '~> 2.9', require: false
gem 'brakeman', '~> 4.10', require: false gem 'brakeman', '~> 4.10', require: false
gem 'bundler-audit', '~> 0.7', require: false gem 'bundler-audit', '~> 0.7', require: false

@ -39,9 +39,9 @@ GEM
erubi (~> 1.4) erubi (~> 1.4)
rails-dom-testing (~> 2.0) rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.0.3) rails-html-sanitizer (~> 1.0, >= 1.0.3)
active_model_serializers (0.10.10) active_model_serializers (0.10.12)
actionpack (>= 4.1, < 6.1) actionpack (>= 4.1, < 6.2)
activemodel (>= 4.1, < 6.1) activemodel (>= 4.1, < 6.2)
case_transform (>= 0.2) case_transform (>= 0.2)
jsonapi-renderer (>= 0.1.1.beta1, < 0.3) jsonapi-renderer (>= 0.1.1.beta1, < 0.3)
active_record_query_trace (1.8) active_record_query_trace (1.8)
@ -79,16 +79,16 @@ GEM
cocaine (~> 0.5.3) cocaine (~> 0.5.3)
awrence (1.1.1) awrence (1.1.1)
aws-eventstream (1.1.0) aws-eventstream (1.1.0)
aws-partitions (1.397.0) aws-partitions (1.413.0)
aws-sdk-core (3.109.3) aws-sdk-core (3.110.0)
aws-eventstream (~> 1, >= 1.0.2) aws-eventstream (~> 1, >= 1.0.2)
aws-partitions (~> 1, >= 1.239.0) aws-partitions (~> 1, >= 1.239.0)
aws-sigv4 (~> 1.1) aws-sigv4 (~> 1.1)
jmespath (~> 1.0) jmespath (~> 1.0)
aws-sdk-kms (1.39.0) aws-sdk-kms (1.40.0)
aws-sdk-core (~> 3, >= 3.109.0) aws-sdk-core (~> 3, >= 3.109.0)
aws-sigv4 (~> 1.1) aws-sigv4 (~> 1.1)
aws-sdk-s3 (1.85.0) aws-sdk-s3 (1.87.0)
aws-sdk-core (~> 3, >= 3.109.0) aws-sdk-core (~> 3, >= 3.109.0)
aws-sdk-kms (~> 1) aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.1) aws-sigv4 (~> 1.1)
@ -106,10 +106,10 @@ GEM
ffi (~> 1.10.0) ffi (~> 1.10.0)
bootsnap (1.5.1) bootsnap (1.5.1)
msgpack (~> 1.0) msgpack (~> 1.0)
brakeman (4.10.0) brakeman (4.10.1)
browser (4.2.0) browser (4.2.0)
builder (3.2.4) builder (3.2.4)
bullet (6.1.0) bullet (6.1.2)
activesupport (>= 3.0.0) activesupport (>= 3.0.0)
uniform_notifier (~> 1.11) uniform_notifier (~> 1.11)
bundler-audit (0.7.0.1) bundler-audit (0.7.0.1)
@ -131,7 +131,7 @@ GEM
sshkit (~> 1.3) sshkit (~> 1.3)
capistrano-yarn (2.0.2) capistrano-yarn (2.0.2)
capistrano (~> 3.0) capistrano (~> 3.0)
capybara (3.33.0) capybara (3.34.0)
addressable addressable
mini_mime (>= 0.1.3) mini_mime (>= 0.1.3)
nokogiri (~> 1.8) nokogiri (~> 1.8)
@ -147,9 +147,9 @@ GEM
activesupport (>= 4.0) activesupport (>= 4.0)
elasticsearch (>= 2.0.0) elasticsearch (>= 2.0.0)
elasticsearch-dsl elasticsearch-dsl
chunky_png (1.3.12) chunky_png (1.3.15)
cld3 (3.3.0) cld3 (3.4.1)
ffi (>= 1.1.0, < 1.12.0) ffi (>= 1.1.0, < 1.15.0)
climate_control (0.2.0) climate_control (0.2.0)
cocaine (0.5.8) cocaine (0.5.8)
climate_control (>= 0.0.3, < 1.0) climate_control (>= 0.0.3, < 1.0)
@ -160,7 +160,8 @@ GEM
cose (1.0.0) cose (1.0.0)
cbor (~> 0.5.9) cbor (~> 0.5.9)
openssl-signature_algorithm (~> 0.4.0) openssl-signature_algorithm (~> 0.4.0)
crack (0.4.4) crack (0.4.5)
rexml
crass (1.0.6) crass (1.0.6)
css_parser (1.7.1) css_parser (1.7.1)
addressable addressable
@ -183,7 +184,7 @@ GEM
diff-lcs (1.4.4) diff-lcs (1.4.4)
discard (1.2.0) discard (1.2.0)
activerecord (>= 4.2, < 7) activerecord (>= 4.2, < 7)
docile (1.3.2) docile (1.3.4)
domain_name (0.5.20190701) domain_name (0.5.20190701)
unf (>= 0.0.5, < 1.0.0) unf (>= 0.0.5, < 1.0.0)
doorkeeper (5.4.0) doorkeeper (5.4.0)
@ -204,17 +205,17 @@ GEM
faraday (~> 1) faraday (~> 1)
multi_json multi_json
encryptor (3.0.0) encryptor (3.0.0)
erubi (1.9.0) erubi (1.10.0)
et-orbi (1.2.4) et-orbi (1.2.4)
tzinfo tzinfo
excon (0.76.0) excon (0.76.0)
fabrication (2.21.1) fabrication (2.21.1)
faker (2.14.0) faker (2.15.1)
i18n (>= 1.6, < 2) i18n (>= 1.6, < 2)
faraday (1.0.1) faraday (1.0.1)
multipart-post (>= 1.2, < 3) multipart-post (>= 1.2, < 3)
fast_blank (1.0.0) fast_blank (1.0.0)
fastimage (2.2.0) fastimage (2.2.1)
ffi (1.10.0) ffi (1.10.0)
ffi-compiler (1.0.1) ffi-compiler (1.0.1)
ffi (>= 1.0.0) ffi (>= 1.0.0)
@ -235,7 +236,7 @@ GEM
fugit (1.3.9) fugit (1.3.9)
et-orbi (~> 1.1, >= 1.1.8) et-orbi (~> 1.1, >= 1.1.8)
raabro (~> 1.3) raabro (~> 1.3)
fuubar (2.5.0) fuubar (2.5.1)
rspec-core (~> 3.0) rspec-core (~> 3.0)
ruby-progressbar (~> 1.4) ruby-progressbar (~> 1.4)
globalid (0.4.2) globalid (0.4.2)
@ -273,7 +274,7 @@ GEM
rainbow (>= 2.0.0) rainbow (>= 2.0.0)
i18n (1.8.5) i18n (1.8.5)
concurrent-ruby (~> 1.0) concurrent-ruby (~> 1.0)
i18n-tasks (0.9.31) i18n-tasks (0.9.33)
activesupport (>= 4.0.2) activesupport (>= 4.0.2)
ast (>= 2.1.0) ast (>= 2.1.0)
erubi erubi
@ -289,14 +290,14 @@ GEM
jmespath (1.4.0) jmespath (1.4.0)
json (2.3.1) json (2.3.1)
json-canonicalization (0.2.0) json-canonicalization (0.2.0)
json-ld (3.1.5) json-ld (3.1.7)
htmlentities (~> 4.3) htmlentities (~> 4.3)
json-canonicalization (~> 0.2) json-canonicalization (~> 0.2)
link_header (~> 0.0, >= 0.0.8) link_header (~> 0.0, >= 0.0.8)
multi_json (~> 1.14) multi_json (~> 1.14)
rack (~> 2.0) rack (~> 2.0)
rdf (~> 3.1) rdf (~> 3.1)
json-ld-preloaded (3.1.3) json-ld-preloaded (3.1.4)
json-ld (~> 3.1) json-ld (~> 3.1)
rdf (~> 3.1) rdf (~> 3.1)
jsonapi-renderer (0.2.2) jsonapi-renderer (0.2.2)
@ -327,7 +328,7 @@ GEM
activesupport (>= 4) activesupport (>= 4)
railties (>= 4) railties (>= 4)
request_store (~> 1.0) request_store (~> 1.0)
loofah (2.7.0) loofah (2.8.0)
crass (~> 1.0.2) crass (~> 1.0.2)
nokogiri (>= 1.5.9) nokogiri (>= 1.5.9)
mail (2.7.1) mail (2.7.1)
@ -338,7 +339,7 @@ GEM
mimemagic (~> 0.3.2) mimemagic (~> 0.3.2)
mario-redis-lock (1.2.1) mario-redis-lock (1.2.1)
redis (>= 3.0.5) redis (>= 3.0.5)
memory_profiler (0.9.14) memory_profiler (1.0.0)
method_source (1.0.0) method_source (1.0.0)
microformats (4.2.1) microformats (4.2.1)
json (~> 2.2) json (~> 2.2)
@ -348,18 +349,19 @@ GEM
mime-types-data (3.2020.0512) mime-types-data (3.2020.0512)
mimemagic (0.3.5) mimemagic (0.3.5)
mini_mime (1.0.2) mini_mime (1.0.2)
mini_portile2 (2.4.0) mini_portile2 (2.5.0)
minitest (5.14.2) minitest (5.14.2)
msgpack (1.3.3) msgpack (1.3.3)
multi_json (1.15.0) multi_json (1.15.0)
multipart-post (2.1.1) multipart-post (2.1.1)
net-ldap (0.16.3) net-ldap (0.17.0)
net-scp (3.0.0) net-scp (3.0.0)
net-ssh (>= 2.6.5, < 7.0.0) net-ssh (>= 2.6.5, < 7.0.0)
net-ssh (6.1.0) net-ssh (6.1.0)
nio4r (2.5.4) nio4r (2.5.4)
nokogiri (1.10.10) nokogiri (1.11.0)
mini_portile2 (~> 2.4.0) mini_portile2 (~> 2.5.0)
racc (~> 1.4)
nokogumbo (2.0.2) nokogumbo (2.0.2)
nokogiri (~> 1.8, >= 1.8.4) nokogiri (~> 1.8, >= 1.8.4)
nsa (0.2.7) nsa (0.2.7)
@ -367,7 +369,7 @@ GEM
concurrent-ruby (~> 1.0, >= 1.0.2) concurrent-ruby (~> 1.0, >= 1.0.2)
sidekiq (>= 3.5) sidekiq (>= 3.5)
statsd-ruby (~> 1.4, >= 1.4.0) statsd-ruby (~> 1.4, >= 1.4.0)
oj (3.10.16) oj (3.10.18)
omniauth (1.9.1) omniauth (1.9.1)
hashie (>= 3.4.6) hashie (>= 3.4.6)
rack (>= 1.6.2, < 3) rack (>= 1.6.2, < 3)
@ -384,7 +386,7 @@ GEM
openssl (2.2.0) openssl (2.2.0)
openssl-signature_algorithm (0.4.0) openssl-signature_algorithm (0.4.0)
orm_adapter (0.5.0) orm_adapter (0.5.0)
ox (2.13.4) ox (2.14.0)
paperclip (6.0.0) paperclip (6.0.0)
activemodel (>= 4.2.0) activemodel (>= 4.2.0)
activesupport (>= 4.2.0) activesupport (>= 4.2.0)
@ -397,13 +399,13 @@ GEM
parallel (1.20.1) parallel (1.20.1)
parallel_tests (3.4.0) parallel_tests (3.4.0)
parallel parallel
parser (2.7.2.0) parser (3.0.0.0)
ast (~> 2.4.1) ast (~> 2.4.1)
parslet (2.0.0) parslet (2.0.0)
pastel (0.8.0) pastel (0.8.0)
tty-color (~> 0.5) tty-color (~> 0.5)
pg (1.2.3) pg (1.2.3)
pghero (2.7.2) pghero (2.7.3)
activerecord (>= 5) activerecord (>= 5)
pkg-config (1.4.4) pkg-config (1.4.4)
pluck_each (0.1.3) pluck_each (0.1.3)
@ -427,11 +429,12 @@ GEM
pry-rails (0.3.9) pry-rails (0.3.9)
pry (>= 0.10.4) pry (>= 0.10.4)
public_suffix (4.0.6) public_suffix (4.0.6)
puma (5.0.4) puma (5.1.1)
nio4r (~> 2.0) nio4r (~> 2.0)
pundit (2.1.0) pundit (2.1.0)
activesupport (>= 3.0.0) activesupport (>= 3.0.0)
raabro (1.3.3) raabro (1.3.3)
racc (1.5.2)
rack (2.2.3) rack (2.2.3)
rack-attack (6.3.1) rack-attack (6.3.1)
rack (>= 1.0, < 3) rack (>= 1.0, < 3)
@ -475,8 +478,8 @@ GEM
rake (>= 0.8.7) rake (>= 0.8.7)
thor (>= 0.19.0, < 2.0) thor (>= 0.19.0, < 2.0)
rainbow (3.0.0) rainbow (3.0.0)
rake (13.0.1) rake (13.0.3)
rdf (3.1.7) rdf (3.1.8)
hamster (~> 3.0) hamster (~> 3.0)
link_header (~> 0.0, >= 0.0.8) link_header (~> 0.0, >= 0.0.8)
rdf-normalize (0.4.0) rdf-normalize (0.4.0)
@ -510,48 +513,48 @@ GEM
rexml (3.2.4) rexml (3.2.4)
rotp (2.1.2) rotp (2.1.2)
rpam2 (4.0.2) rpam2 (4.0.2)
rqrcode (1.1.2) rqrcode (1.2.0)
chunky_png (~> 1.0) chunky_png (~> 1.0)
rqrcode_core (~> 0.1) rqrcode_core (~> 0.2)
rqrcode_core (0.1.2) rqrcode_core (0.2.0)
rspec-core (3.9.3) rspec-core (3.10.1)
rspec-support (~> 3.9.3) rspec-support (~> 3.10.0)
rspec-expectations (3.9.2) rspec-expectations (3.10.1)
diff-lcs (>= 1.2.0, < 2.0) diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.9.0) rspec-support (~> 3.10.0)
rspec-mocks (3.9.1) rspec-mocks (3.10.1)
diff-lcs (>= 1.2.0, < 2.0) diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.9.0) rspec-support (~> 3.10.0)
rspec-rails (4.0.1) rspec-rails (4.0.2)
actionpack (>= 4.2) actionpack (>= 4.2)
activesupport (>= 4.2) activesupport (>= 4.2)
railties (>= 4.2) railties (>= 4.2)
rspec-core (~> 3.9) rspec-core (~> 3.10)
rspec-expectations (~> 3.9) rspec-expectations (~> 3.10)
rspec-mocks (~> 3.9) rspec-mocks (~> 3.10)
rspec-support (~> 3.9) rspec-support (~> 3.10)
rspec-sidekiq (3.1.0) rspec-sidekiq (3.1.0)
rspec-core (~> 3.0, >= 3.0.0) rspec-core (~> 3.0, >= 3.0.0)
sidekiq (>= 2.4.0) sidekiq (>= 2.4.0)
rspec-support (3.9.3) rspec-support (3.10.1)
rspec_junit_formatter (0.4.1) rspec_junit_formatter (0.4.1)
rspec-core (>= 2, < 4, != 2.12.0) rspec-core (>= 2, < 4, != 2.12.0)
rubocop (1.3.1) rubocop (1.7.0)
parallel (~> 1.10) parallel (~> 1.10)
parser (>= 2.7.1.5) parser (>= 2.7.1.5)
rainbow (>= 2.2.2, < 4.0) rainbow (>= 2.2.2, < 4.0)
regexp_parser (>= 1.8) regexp_parser (>= 1.8, < 3.0)
rexml rexml
rubocop-ast (>= 1.1.1) rubocop-ast (>= 1.2.0, < 2.0)
ruby-progressbar (~> 1.7) ruby-progressbar (~> 1.7)
unicode-display_width (>= 1.4.0, < 2.0) unicode-display_width (>= 1.4.0, < 2.0)
rubocop-ast (1.1.1) rubocop-ast (1.3.0)
parser (>= 2.7.1.5) parser (>= 2.7.1.5)
rubocop-rails (2.8.1) rubocop-rails (2.9.1)
activesupport (>= 4.2.0) activesupport (>= 4.2.0)
rack (>= 1.1) rack (>= 1.1)
rubocop (>= 0.87.0) rubocop (>= 0.90.0, < 2.0)
ruby-progressbar (1.10.1) ruby-progressbar (1.11.0)
ruby-saml (1.11.0) ruby-saml (1.11.0)
nokogiri (>= 1.5.10) nokogiri (>= 1.5.10)
rufus-scheduler (3.6.0) rufus-scheduler (3.6.0)
@ -589,10 +592,12 @@ GEM
simple_form (5.0.3) simple_form (5.0.3)
actionpack (>= 5.0) actionpack (>= 5.0)
activemodel (>= 5.0) activemodel (>= 5.0)
simplecov (0.19.1) simplecov (0.21.0)
docile (~> 1.1) docile (~> 1.1)
simplecov-html (~> 0.11) simplecov-html (~> 0.11)
simplecov_json_formatter (~> 0.1)
simplecov-html (0.12.3) simplecov-html (0.12.3)
simplecov_json_formatter (0.1.2)
sprockets (3.7.2) sprockets (3.7.2)
concurrent-ruby (~> 1.0) concurrent-ruby (~> 1.0)
rack (> 1, < 3) rack (> 1, < 3)
@ -608,10 +613,10 @@ GEM
stoplight (2.2.1) stoplight (2.2.1)
streamio-ffmpeg (3.0.2) streamio-ffmpeg (3.0.2)
multi_json (~> 1.8) multi_json (~> 1.8)
strong_migrations (0.7.2) strong_migrations (0.7.4)
activerecord (>= 5) activerecord (>= 5)
temple (0.8.2) temple (0.8.2)
terminal-table (1.8.0) terminal-table (2.0.0)
unicode-display_width (~> 1.1, >= 1.1.1) unicode-display_width (~> 1.1, >= 1.1.1)
terrapin (0.6.0) terrapin (0.6.0)
climate_control (>= 0.0.3, < 1.0) climate_control (>= 0.0.3, < 1.0)
@ -623,21 +628,21 @@ GEM
tpm-key_attestation (0.9.0) tpm-key_attestation (0.9.0)
bindata (~> 2.4) bindata (~> 2.4)
openssl-signature_algorithm (~> 0.4.0) openssl-signature_algorithm (~> 0.4.0)
tty-color (0.5.2) tty-color (0.6.0)
tty-cursor (0.7.1) tty-cursor (0.7.1)
tty-prompt (0.22.0) tty-prompt (0.23.0)
pastel (~> 0.8) pastel (~> 0.8)
tty-reader (~> 0.8) tty-reader (~> 0.8)
tty-reader (0.8.0) tty-reader (0.9.0)
tty-cursor (~> 0.7) tty-cursor (~> 0.7)
tty-screen (~> 0.8) tty-screen (~> 0.8)
wisper (~> 2.0) wisper (~> 2.0)
tty-screen (0.8.1) tty-screen (0.8.1)
twitter-text (1.14.7) twitter-text (1.14.7)
unf (~> 0.1.0) unf (~> 0.1.0)
tzinfo (1.2.7) tzinfo (1.2.9)
thread_safe (~> 0.1) thread_safe (~> 0.1)
tzinfo-data (1.2020.4) tzinfo-data (1.2020.6)
tzinfo (>= 1.0.0) tzinfo (>= 1.0.0)
unf (0.1.4) unf (0.1.4)
unf_ext unf_ext
@ -656,7 +661,7 @@ GEM
safety_net_attestation (~> 0.4.0) safety_net_attestation (~> 0.4.0)
securecompare (~> 1.0) securecompare (~> 1.0)
tpm-key_attestation (~> 0.9.0) tpm-key_attestation (~> 0.9.0)
webmock (3.10.0) webmock (3.11.0)
addressable (>= 2.3.6) addressable (>= 2.3.6)
crack (>= 0.3.2) crack (>= 0.3.2)
hashdiff (>= 0.4.0, < 2.0.0) hashdiff (>= 0.4.0, < 2.0.0)
@ -684,7 +689,7 @@ DEPENDENCIES
active_record_query_trace (~> 1.8) active_record_query_trace (~> 1.8)
addressable (~> 2.7) addressable (~> 2.7)
annotate (~> 3.1) annotate (~> 3.1)
aws-sdk-s3 (~> 1.85) aws-sdk-s3 (~> 1.87)
better_errors (~> 2.9) better_errors (~> 2.9)
binding_of_caller (~> 0.7) binding_of_caller (~> 0.7)
blurhash (~> 0.1) blurhash (~> 0.1)
@ -697,10 +702,10 @@ DEPENDENCIES
capistrano-rails (~> 1.6) capistrano-rails (~> 1.6)
capistrano-rbenv (~> 2.2) capistrano-rbenv (~> 2.2)
capistrano-yarn (~> 2.0) capistrano-yarn (~> 2.0)
capybara (~> 3.33) capybara (~> 3.34)
charlock_holmes (~> 0.7.7) charlock_holmes (~> 0.7.7)
chewy (~> 5.1) chewy (~> 5.1)
cld3 (~> 3.3.0) cld3 (~> 3.4.1)
climate_control (~> 0.2) climate_control (~> 0.2)
color_diff (~> 0.1) color_diff (~> 0.1)
concurrent-ruby concurrent-ruby
@ -713,7 +718,7 @@ DEPENDENCIES
dotenv-rails (~> 2.7) dotenv-rails (~> 2.7)
ed25519 (~> 1.2) ed25519 (~> 1.2)
fabrication (~> 2.21) fabrication (~> 2.21)
faker (~> 2.14) faker (~> 2.15)
fast_blank (~> 1.0) fast_blank (~> 1.0)
fastimage fastimage
fog-core (<= 2.1.0) fog-core (<= 2.1.0)
@ -741,16 +746,16 @@ DEPENDENCIES
memory_profiler memory_profiler
microformats (~> 4.2) microformats (~> 4.2)
mime-types (~> 3.3.1) mime-types (~> 3.3.1)
net-ldap (~> 0.16) net-ldap (~> 0.17)
nilsimsa! nilsimsa!
nokogiri (~> 1.10) nokogiri (~> 1.11)
nsa (~> 0.2) nsa (~> 0.2)
oj (~> 3.10) oj (~> 3.10)
omniauth (~> 1.9) omniauth (~> 1.9)
omniauth-cas (~> 2.0) omniauth-cas (~> 2.0)
omniauth-rails_csrf_protection (~> 0.1) omniauth-rails_csrf_protection (~> 0.1)
omniauth-saml (~> 1.10) omniauth-saml (~> 1.10)
ox (~> 2.13) ox (~> 2.14)
paperclip (~> 6.0) paperclip (~> 6.0)
paperclip-av-transcoder (~> 0.6) paperclip-av-transcoder (~> 0.6)
parallel (~> 1.20) parallel (~> 1.20)
@ -765,7 +770,7 @@ DEPENDENCIES
private_address_check (~> 0.5) private_address_check (~> 0.5)
pry-byebug (~> 3.9) pry-byebug (~> 3.9)
pry-rails (~> 0.3) pry-rails (~> 0.3)
puma (~> 5.0) puma (~> 5.1)
pundit (~> 2.1) pundit (~> 2.1)
rack (~> 2.2.3) rack (~> 2.2.3)
rack-attack (~> 6.3) rack-attack (~> 6.3)
@ -779,13 +784,13 @@ DEPENDENCIES
redis (~> 4.2) redis (~> 4.2)
redis-namespace (~> 1.8) redis-namespace (~> 1.8)
redis-rails (~> 5.0) redis-rails (~> 5.0)
rqrcode (~> 1.1) rqrcode (~> 1.2)
rspec-rails (~> 4.0) rspec-rails (~> 4.0)
rspec-sidekiq (~> 3.1) rspec-sidekiq (~> 3.1)
rspec_junit_formatter (~> 0.4) rspec_junit_formatter (~> 0.4)
rubocop (~> 1.3) rubocop (~> 1.7)
rubocop-rails (~> 2.8) rubocop-rails (~> 2.9)
ruby-progressbar (~> 1.10) ruby-progressbar (~> 1.11)
sanitize (~> 5.2) sanitize (~> 5.2)
scenic (~> 1.5) scenic (~> 1.5)
sidekiq (~> 6.1) sidekiq (~> 6.1)
@ -794,7 +799,7 @@ DEPENDENCIES
sidekiq-unique-jobs (~> 6.0) sidekiq-unique-jobs (~> 6.0)
simple-navigation (~> 4.1) simple-navigation (~> 4.1)
simple_form (~> 5.0) simple_form (~> 5.0)
simplecov (~> 0.19) simplecov (~> 0.21)
sprockets (~> 3.7.2) sprockets (~> 3.7.2)
sprockets-rails (~> 3.2) sprockets-rails (~> 3.2)
stackprof stackprof
@ -802,11 +807,11 @@ DEPENDENCIES
streamio-ffmpeg (~> 3.0) streamio-ffmpeg (~> 3.0)
strong_migrations (~> 0.7) strong_migrations (~> 0.7)
thor (~> 1.0) thor (~> 1.0)
tty-prompt (~> 0.22) tty-prompt (~> 0.23)
twitter-text (~> 1.14) twitter-text (~> 1.14)
tzinfo-data (~> 1.2020) tzinfo-data (~> 1.2020)
webauthn (~> 3.0.0.alpha1) webauthn (~> 3.0.0.alpha1)
webmock (~> 3.10) webmock (~> 3.11)
webpacker (~> 5.2) webpacker (~> 5.2)
webpush webpush
xorcist (~> 1.1) xorcist (~> 1.1)

@ -7,7 +7,7 @@ class Api::V1::Accounts::FeaturedTagsController < Api::BaseController
respond_to :json respond_to :json
def index def index
render json: @featured_tags, each_serializer: REST::AccountFeaturedTagSerializer render json: @featured_tags, each_serializer: REST::FeaturedTagSerializer
end end
private private

@ -7,8 +7,12 @@ module Settings
def destroy def destroy
if valid_picture? if valid_picture?
msg = I18n.t('generic.changes_saved_msg') if UpdateAccountService.new.call(@account, { @picture => nil, "#{@picture}_remote_url" => '' }) if UpdateAccountService.new.call(@account, { @picture => nil, "#{@picture}_remote_url" => '' })
redirect_to settings_profile_path, notice: msg, status: 303 ActivityPub::UpdateDistributionWorker.perform_async(@account.id)
redirect_to settings_profile_path, notice: I18n.t('generic.changes_saved_msg'), status: 303
else
redirect_to settings_profile_path
end
else else
bad_request bad_request
end end

@ -10,17 +10,11 @@ export default class Button extends React.PureComponent {
disabled: PropTypes.bool, disabled: PropTypes.bool,
block: PropTypes.bool, block: PropTypes.bool,
secondary: PropTypes.bool, secondary: PropTypes.bool,
size: PropTypes.number,
className: PropTypes.string, className: PropTypes.string,
title: PropTypes.string, title: PropTypes.string,
style: PropTypes.object,
children: PropTypes.node, children: PropTypes.node,
}; };
static defaultProps = {
size: 36,
};
handleClick = (e) => { handleClick = (e) => {
if (!this.props.disabled) { if (!this.props.disabled) {
this.props.onClick(e); this.props.onClick(e);
@ -44,12 +38,6 @@ export default class Button extends React.PureComponent {
disabled: this.props.disabled, disabled: this.props.disabled,
onClick: this.handleClick, onClick: this.handleClick,
ref: this.setRef, ref: this.setRef,
style: {
padding: `0 ${this.props.size / 2.25}px`,
height: `${this.props.size}px`,
lineHeight: `${this.props.size}px`,
...this.props.style,
},
}; };
if (this.props.title) attrs.title = this.props.title; if (this.props.title) attrs.title = this.props.title;

@ -159,13 +159,17 @@ class Header extends ImmutablePureComponent {
info.push(<span className='relationship-tag'><FormattedMessage id='account.domain_blocked' defaultMessage='Domain blocked' /></span>); info.push(<span className='relationship-tag'><FormattedMessage id='account.domain_blocked' defaultMessage='Domain blocked' /></span>);
} }
if (account.getIn(['relationship', 'requested']) || account.getIn(['relationship', 'following'])) {
bellBtn = <IconButton icon='bell-o' size={24} active={account.getIn(['relationship', 'notifying'])} title={intl.formatMessage(account.getIn(['relationship', 'notifying']) ? messages.disableNotifications : messages.enableNotifications, { name: account.get('username') })} onClick={this.props.onNotifyToggle} />;
}
if (me !== account.get('id')) { if (me !== account.get('id')) {
if (!account.get('relationship')) { // Wait until the relationship is loaded if (!account.get('relationship')) { // Wait until the relationship is loaded
actionBtn = ''; actionBtn = '';
} else if (account.getIn(['relationship', 'requested'])) { } else if (account.getIn(['relationship', 'requested'])) {
actionBtn = <Button className='logo-button' text={intl.formatMessage(messages.cancel_follow_request)} title={intl.formatMessage(messages.requested)} onClick={this.props.onFollow} />; actionBtn = <Button className={classNames('logo-button', { 'button--with-bell': bellBtn !== '' })} text={intl.formatMessage(messages.cancel_follow_request)} title={intl.formatMessage(messages.requested)} onClick={this.props.onFollow} />;
} else if (!account.getIn(['relationship', 'blocking'])) { } else if (!account.getIn(['relationship', 'blocking'])) {
actionBtn = <Button className={classNames('logo-button', { 'button--destructive': account.getIn(['relationship', 'following']) })} text={intl.formatMessage(account.getIn(['relationship', 'following']) ? messages.unfollow : messages.follow)} onClick={this.props.onFollow} />; actionBtn = <Button className={classNames('logo-button', { 'button--destructive': account.getIn(['relationship', 'following']), 'button--with-bell': bellBtn !== '' })} text={intl.formatMessage(account.getIn(['relationship', 'following']) ? messages.unfollow : messages.follow)} onClick={this.props.onFollow} />;
} else if (account.getIn(['relationship', 'blocking'])) { } else if (account.getIn(['relationship', 'blocking'])) {
actionBtn = <Button className='logo-button' text={intl.formatMessage(messages.unblock, { name: account.get('username') })} onClick={this.props.onBlock} />; actionBtn = <Button className='logo-button' text={intl.formatMessage(messages.unblock, { name: account.get('username') })} onClick={this.props.onBlock} />;
} }
@ -173,10 +177,6 @@ class Header extends ImmutablePureComponent {
actionBtn = <Button className='logo-button' text={intl.formatMessage(messages.edit_profile)} onClick={this.openEditProfile} />; actionBtn = <Button className='logo-button' text={intl.formatMessage(messages.edit_profile)} onClick={this.openEditProfile} />;
} }
if (account.getIn(['relationship', 'requested']) || account.getIn(['relationship', 'following'])) {
bellBtn = <IconButton icon='bell-o' size={24} active={account.getIn(['relationship', 'notifying'])} title={intl.formatMessage(account.getIn(['relationship', 'notifying']) ? messages.disableNotifications : messages.enableNotifications, { name: account.get('username') })} onClick={this.props.onNotifyToggle} />;
}
if (account.get('moved') && !account.getIn(['relationship', 'following'])) { if (account.get('moved') && !account.getIn(['relationship', 'following'])) {
actionBtn = ''; actionBtn = '';
} }

@ -194,7 +194,7 @@ class ListTimeline extends React.PureComponent {
</span> </span>
<div className='column-settings__row'> <div className='column-settings__row'>
{ ['none', 'list', 'followed'].map(policy => ( { ['none', 'list', 'followed'].map(policy => (
<RadioButton name='order' value={policy} label={intl.formatMessage(messages[policy])} checked={replies_policy === policy} onChange={this.handleRepliesPolicyChange} /> <RadioButton name='order' key={policy} value={policy} label={intl.formatMessage(messages[policy])} checked={replies_policy === policy} onChange={this.handleRepliesPolicyChange} />
))} ))}
</div> </div>
</div> </div>

@ -127,7 +127,7 @@ class Video extends React.PureComponent {
}; };
static defaultProps = { static defaultProps = {
frameRate: 25, frameRate: '25',
}; };
state = { state = {

@ -141,6 +141,11 @@
display: block; display: block;
width: 100%; width: 100%;
} }
.layout-multiple-columns &.button--with-bell {
font-size: 12px;
padding: 0 8px;
}
} }
.icon-button { .icon-button {
@ -923,6 +928,7 @@
flex: 0 0 auto; flex: 0 0 auto;
padding: 10px; padding: 10px;
padding-top: 20px; padding-top: 20px;
z-index: 1;
ul { ul {
margin-bottom: 10px; margin-bottom: 10px;

@ -446,6 +446,10 @@
} }
} }
.logo-button {
padding: 3px 15px;
}
&__image { &__image {
border-radius: 4px 4px 0 0; border-radius: 4px 4px 0 0;
overflow: hidden; overflow: hidden;

@ -163,6 +163,11 @@ body.rtl {
right: 42px; right: 42px;
} }
.account__header__tabs__buttons > .icon-button {
margin-right: 0;
margin-left: 8px;
}
.account__avatar-overlay-overlay { .account__avatar-overlay-overlay {
right: auto; right: auto;
left: 0; left: 0;

@ -79,9 +79,14 @@
background: $ui-highlight-color; background: $ui-highlight-color;
color: $primary-text-color; color: $primary-text-color;
text-transform: none; text-transform: none;
line-height: 36px; line-height: 1.2;
height: auto; height: auto;
padding: 3px 15px; min-height: 36px;
min-width: 88px;
white-space: normal;
overflow-wrap: break-word;
hyphens: auto;
padding: 0 15px;
border: 0; border: 0;
svg { svg {
@ -122,6 +127,12 @@
} }
} }
a.button.logo-button {
display: inline-flex;
align-items: center;
justify-content: center;
}
.embed, .embed,
.public-layout { .public-layout {
.status__content[data-spoiler=folded] { .status__content[data-spoiler=folded] {

@ -4,13 +4,6 @@ exports[`<Button /> adds class "button-secondary" if props.secondary given 1`] =
<button <button
className="button button-secondary" className="button button-secondary"
onClick={[Function]} onClick={[Function]}
style={
Object {
"height": "36px",
"lineHeight": "36px",
"padding": "0 16px",
}
}
/> />
`; `;
@ -18,13 +11,6 @@ exports[`<Button /> renders a button element 1`] = `
<button <button
className="button" className="button"
onClick={[Function]} onClick={[Function]}
style={
Object {
"height": "36px",
"lineHeight": "36px",
"padding": "0 16px",
}
}
/> />
`; `;
@ -33,13 +19,6 @@ exports[`<Button /> renders a disabled attribute if props.disabled given 1`] = `
className="button" className="button"
disabled={true} disabled={true}
onClick={[Function]} onClick={[Function]}
style={
Object {
"height": "36px",
"lineHeight": "36px",
"padding": "0 16px",
}
}
/> />
`; `;
@ -47,13 +26,6 @@ exports[`<Button /> renders class="button--block" if props.block given 1`] = `
<button <button
className="button button--block" className="button button--block"
onClick={[Function]} onClick={[Function]}
style={
Object {
"height": "36px",
"lineHeight": "36px",
"padding": "0 16px",
}
}
/> />
`; `;
@ -61,13 +33,6 @@ exports[`<Button /> renders the children 1`] = `
<button <button
className="button" className="button"
onClick={[Function]} onClick={[Function]}
style={
Object {
"height": "36px",
"lineHeight": "36px",
"padding": "0 16px",
}
}
> >
<p> <p>
children children
@ -79,13 +44,6 @@ exports[`<Button /> renders the given text 1`] = `
<button <button
className="button" className="button"
onClick={[Function]} onClick={[Function]}
style={
Object {
"height": "36px",
"lineHeight": "36px",
"padding": "0 16px",
}
}
> >
foo foo
</button> </button>
@ -95,13 +53,6 @@ exports[`<Button /> renders the props.text instead of children 1`] = `
<button <button
className="button" className="button"
onClick={[Function]} onClick={[Function]}
style={
Object {
"height": "36px",
"lineHeight": "36px",
"padding": "0 16px",
}
}
> >
foo foo
</button> </button>

@ -10,17 +10,11 @@ export default class Button extends React.PureComponent {
disabled: PropTypes.bool, disabled: PropTypes.bool,
block: PropTypes.bool, block: PropTypes.bool,
secondary: PropTypes.bool, secondary: PropTypes.bool,
size: PropTypes.number,
className: PropTypes.string, className: PropTypes.string,
title: PropTypes.string, title: PropTypes.string,
style: PropTypes.object,
children: PropTypes.node, children: PropTypes.node,
}; };
static defaultProps = {
size: 36,
};
handleClick = (e) => { handleClick = (e) => {
if (!this.props.disabled) { if (!this.props.disabled) {
this.props.onClick(e); this.props.onClick(e);
@ -36,13 +30,6 @@ export default class Button extends React.PureComponent {
} }
render () { render () {
const style = {
padding: `0 ${this.props.size / 2.25}px`,
height: `${this.props.size}px`,
lineHeight: `${this.props.size}px`,
...this.props.style,
};
const className = classNames('button', this.props.className, { const className = classNames('button', this.props.className, {
'button-secondary': this.props.secondary, 'button-secondary': this.props.secondary,
'button--block': this.props.block, 'button--block': this.props.block,
@ -54,7 +41,6 @@ export default class Button extends React.PureComponent {
disabled={this.props.disabled} disabled={this.props.disabled}
onClick={this.handleClick} onClick={this.handleClick}
ref={this.setRef} ref={this.setRef}
style={style}
title={this.props.title} title={this.props.title}
> >
{this.props.text || this.props.children} {this.props.text || this.props.children}

@ -2,7 +2,7 @@ import React, { PureComponent, Fragment } from 'react';
import ReactDOM from 'react-dom'; import ReactDOM from 'react-dom';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { IntlProvider, addLocaleData } from 'react-intl'; import { IntlProvider, addLocaleData } from 'react-intl';
import { List as ImmutableList, fromJS } from 'immutable'; import { fromJS } from 'immutable';
import { getLocale } from 'mastodon/locales'; import { getLocale } from 'mastodon/locales';
import { getScrollbarWidth } from 'mastodon/utils/scrollbar'; import { getScrollbarWidth } from 'mastodon/utils/scrollbar';
import MediaGallery from 'mastodon/components/media_gallery'; import MediaGallery from 'mastodon/components/media_gallery';
@ -31,6 +31,7 @@ export default class MediaContainer extends PureComponent {
index: null, index: null,
time: null, time: null,
backgroundColor: null, backgroundColor: null,
options: null,
}; };
handleOpenMedia = (media, index) => { handleOpenMedia = (media, index) => {
@ -40,13 +41,15 @@ export default class MediaContainer extends PureComponent {
this.setState({ media, index }); this.setState({ media, index });
} }
handleOpenVideo = (video, time) => { handleOpenVideo = (options) => {
const media = ImmutableList([video]); const { components } = this.props;
const { media } = JSON.parse(components[options.componetIndex].getAttribute('data-props'));
const mediaList = fromJS(media);
document.body.classList.add('with-modals--active'); document.body.classList.add('with-modals--active');
document.documentElement.style.marginRight = `${getScrollbarWidth()}px`; document.documentElement.style.marginRight = `${getScrollbarWidth()}px`;
this.setState({ media, time }); this.setState({ media: mediaList, options });
} }
handleCloseMedia = () => { handleCloseMedia = () => {
@ -58,6 +61,7 @@ export default class MediaContainer extends PureComponent {
index: null, index: null,
time: null, time: null,
backgroundColor: null, backgroundColor: null,
options: null,
}); });
} }
@ -83,6 +87,7 @@ export default class MediaContainer extends PureComponent {
...(hashtag ? { hashtag: fromJS(hashtag) } : {}), ...(hashtag ? { hashtag: fromJS(hashtag) } : {}),
...(componentName === 'Video' ? { ...(componentName === 'Video' ? {
componetIndex: i,
onOpenVideo: this.handleOpenVideo, onOpenVideo: this.handleOpenVideo,
} : { } : {
onOpenMedia: this.handleOpenMedia, onOpenMedia: this.handleOpenMedia,
@ -100,7 +105,9 @@ export default class MediaContainer extends PureComponent {
<MediaModal <MediaModal
media={this.state.media} media={this.state.media}
index={this.state.index || 0} index={this.state.index || 0}
time={this.state.time} currentTime={this.state.options?.startTime}
autoPlay={this.state.options?.autoPlay}
volume={this.state.options?.defaultVolume}
onClose={this.handleCloseMedia} onClose={this.handleCloseMedia}
onChangeBackgroundColor={this.setBackgroundColor} onChangeBackgroundColor={this.setBackgroundColor}
/> />

@ -164,13 +164,17 @@ class Header extends ImmutablePureComponent {
info.push(<span key='domain_blocked' className='relationship-tag'><FormattedMessage id='account.domain_blocked' defaultMessage='Domain blocked' /></span>); info.push(<span key='domain_blocked' className='relationship-tag'><FormattedMessage id='account.domain_blocked' defaultMessage='Domain blocked' /></span>);
} }
if (account.getIn(['relationship', 'requested']) || account.getIn(['relationship', 'following'])) {
bellBtn = <IconButton icon='bell-o' size={24} active={account.getIn(['relationship', 'notifying'])} title={intl.formatMessage(account.getIn(['relationship', 'notifying']) ? messages.disableNotifications : messages.enableNotifications, { name: account.get('username') })} onClick={this.props.onNotifyToggle} />;
}
if (me !== account.get('id')) { if (me !== account.get('id')) {
if (!account.get('relationship')) { // Wait until the relationship is loaded if (!account.get('relationship')) { // Wait until the relationship is loaded
actionBtn = ''; actionBtn = '';
} else if (account.getIn(['relationship', 'requested'])) { } else if (account.getIn(['relationship', 'requested'])) {
actionBtn = <Button className='logo-button' text={intl.formatMessage(messages.cancel_follow_request)} title={intl.formatMessage(messages.requested)} onClick={this.props.onFollow} />; actionBtn = <Button className={classNames('logo-button', { 'button--with-bell': bellBtn !== '' })} text={intl.formatMessage(messages.cancel_follow_request)} title={intl.formatMessage(messages.requested)} onClick={this.props.onFollow} />;
} else if (!account.getIn(['relationship', 'blocking'])) { } else if (!account.getIn(['relationship', 'blocking'])) {
actionBtn = <Button disabled={account.getIn(['relationship', 'blocked_by'])} className={classNames('logo-button', { 'button--destructive': account.getIn(['relationship', 'following']) })} text={intl.formatMessage(account.getIn(['relationship', 'following']) ? messages.unfollow : messages.follow)} onClick={this.props.onFollow} />; actionBtn = <Button disabled={account.getIn(['relationship', 'blocked_by'])} className={classNames('logo-button', { 'button--destructive': account.getIn(['relationship', 'following']), 'button--with-bell': bellBtn !== '' })} text={intl.formatMessage(account.getIn(['relationship', 'following']) ? messages.unfollow : messages.follow)} onClick={this.props.onFollow} />;
} else if (account.getIn(['relationship', 'blocking'])) { } else if (account.getIn(['relationship', 'blocking'])) {
actionBtn = <Button className='logo-button' text={intl.formatMessage(messages.unblock, { name: account.get('username') })} onClick={this.props.onBlock} />; actionBtn = <Button className='logo-button' text={intl.formatMessage(messages.unblock, { name: account.get('username') })} onClick={this.props.onBlock} />;
} }
@ -178,10 +182,6 @@ class Header extends ImmutablePureComponent {
actionBtn = <Button className='logo-button' text={intl.formatMessage(messages.edit_profile)} onClick={this.openEditProfile} />; actionBtn = <Button className='logo-button' text={intl.formatMessage(messages.edit_profile)} onClick={this.openEditProfile} />;
} }
if (account.getIn(['relationship', 'requested']) || account.getIn(['relationship', 'following'])) {
bellBtn = <IconButton icon='bell-o' size={24} active={account.getIn(['relationship', 'notifying'])} title={intl.formatMessage(account.getIn(['relationship', 'notifying']) ? messages.disableNotifications : messages.enableNotifications, { name: account.get('username') })} onClick={this.props.onNotifyToggle} />;
}
if (account.get('moved') && !account.getIn(['relationship', 'following'])) { if (account.get('moved') && !account.getIn(['relationship', 'following'])) {
actionBtn = ''; actionBtn = '';
} }

@ -194,7 +194,7 @@ class ListTimeline extends React.PureComponent {
</span> </span>
<div className='column-settings__row'> <div className='column-settings__row'>
{ ['none', 'list', 'followed'].map(policy => ( { ['none', 'list', 'followed'].map(policy => (
<RadioButton name='order' value={policy} label={intl.formatMessage(messages[policy])} checked={replies_policy === policy} onChange={this.handleRepliesPolicyChange} /> <RadioButton name='order' key={policy} value={policy} label={intl.formatMessage(messages[policy])} checked={replies_policy === policy} onChange={this.handleRepliesPolicyChange} />
))} ))}
</div> </div>
</div> </div>

@ -32,6 +32,9 @@ class MediaModal extends ImmutablePureComponent {
onClose: PropTypes.func.isRequired, onClose: PropTypes.func.isRequired,
intl: PropTypes.object.isRequired, intl: PropTypes.object.isRequired,
onChangeBackgroundColor: PropTypes.func.isRequired, onChangeBackgroundColor: PropTypes.func.isRequired,
currentTime: PropTypes.number,
autoPlay: PropTypes.bool,
volume: PropTypes.number,
}; };
static contextTypes = { static contextTypes = {
@ -183,7 +186,7 @@ class MediaModal extends ImmutablePureComponent {
/> />
); );
} else if (image.get('type') === 'video') { } else if (image.get('type') === 'video') {
const { time } = this.props; const { currentTime, autoPlay, volume } = this.props;
return ( return (
<Video <Video
@ -192,7 +195,10 @@ class MediaModal extends ImmutablePureComponent {
src={image.get('url')} src={image.get('url')}
width={image.get('width')} width={image.get('width')}
height={image.get('height')} height={image.get('height')}
currentTime={time || 0} frameRate={image.getIn(['meta', 'original', 'frame_rate'])}
currentTime={currentTime || 0}
autoPlay={autoPlay || false}
volume={volume || 1}
onCloseVideo={onClose} onCloseVideo={onClose}
detailed detailed
alt={image.get('description')} alt={image.get('description')}

@ -121,10 +121,11 @@ class Video extends React.PureComponent {
autoPlay: PropTypes.bool, autoPlay: PropTypes.bool,
volume: PropTypes.number, volume: PropTypes.number,
muted: PropTypes.bool, muted: PropTypes.bool,
componetIndex: PropTypes.number,
}; };
static defaultProps = { static defaultProps = {
frameRate: 25, frameRate: '25',
}; };
state = { state = {
@ -501,6 +502,7 @@ class Video extends React.PureComponent {
startTime: this.video.currentTime, startTime: this.video.currentTime,
autoPlay: !this.state.paused, autoPlay: !this.state.paused,
defaultVolume: this.state.volume, defaultVolume: this.state.volume,
componetIndex: this.props.componetIndex,
}); });
} }

@ -17,8 +17,8 @@
"account.follow": "Հետեւել", "account.follow": "Հետեւել",
"account.followers": "Հետեւողներ", "account.followers": "Հետեւողներ",
"account.followers.empty": "Այս օգտատիրոջը դեռ ոչ մէկ չի հետեւում։", "account.followers.empty": "Այս օգտատիրոջը դեռ ոչ մէկ չի հետեւում։",
"account.followers_counter": "{count, plural, one {{counter} Հետևորդ} other {{counter} Հետևորդներ}}", "account.followers_counter": "{count, plural, one {{counter} Հետեւորդ} other {{counter} Հետեւորդներ}}",
"account.following_counter": "{count, plural, other {{counter} Հետևում են}}", "account.following_counter": "{count, plural, other {{counter} Հետեւում են}}",
"account.follows.empty": "Այս օգտատէրը դեռ ոչ մէկի չի հետեւում։", "account.follows.empty": "Այս օգտատէրը դեռ ոչ մէկի չի հետեւում։",
"account.follows_you": "Հետեւում է քեզ", "account.follows_you": "Հետեւում է քեզ",
"account.hide_reblogs": "Թաքցնել @{name}֊ի տարածածները", "account.hide_reblogs": "Թաքցնել @{name}֊ի տարածածները",
@ -45,7 +45,7 @@
"account.unfollow": "Ապահետեւել", "account.unfollow": "Ապահետեւել",
"account.unmute": "Ապալռեցնել @{name}֊ին", "account.unmute": "Ապալռեցնել @{name}֊ին",
"account.unmute_notifications": "Միացնել ծանուցումները @{name}֊ից", "account.unmute_notifications": "Միացնել ծանուցումները @{name}֊ից",
"account_note.placeholder": "Սեղմեք գրառելու համար", "account_note.placeholder": "Սեղմէ՛ք գրառելու համար\n",
"alert.rate_limited.message": "Փորձէք որոշ ժամանակ անց՝ {retry_time, time, medium}։", "alert.rate_limited.message": "Փորձէք որոշ ժամանակ անց՝ {retry_time, time, medium}։",
"alert.rate_limited.title": "Գործողութիւնների յաճախութիւնը գերազանցում է թոյլատրելին", "alert.rate_limited.title": "Գործողութիւնների յաճախութիւնը գերազանցում է թոյլատրելին",
"alert.unexpected.message": "Անսպասելի սխալ տեղի ունեցաւ։", "alert.unexpected.message": "Անսպասելի սխալ տեղի ունեցաւ։",
@ -57,9 +57,9 @@
"bundle_column_error.retry": "Կրկին փորձել", "bundle_column_error.retry": "Կրկին փորձել",
"bundle_column_error.title": "Ցանցային սխալ", "bundle_column_error.title": "Ցանցային սխալ",
"bundle_modal_error.close": "Փակել", "bundle_modal_error.close": "Փակել",
"bundle_modal_error.message": "Այս բաղադրիչը բեռնելու ընթացքում ինչ֊որ բան խափանվեց։", "bundle_modal_error.message": "Այս բաղադրիչը բեռնելու ընթացքում ինչ֊որ բան խափանուեց։",
"bundle_modal_error.retry": "Կրկին փորձել", "bundle_modal_error.retry": "Կրկին փորձել",
"column.blocks": "Արգելափակված օգտատերեր", "column.blocks": "Արգելափակուած օգտատէրեր",
"column.bookmarks": "Էջանիշեր", "column.bookmarks": "Էջանիշեր",
"column.community": "Տեղական հոսք", "column.community": "Տեղական հոսք",
"column.direct": "Հասցէագրուած հաղորդագրութիւններ", "column.direct": "Հասցէագրուած հաղորդագրութիւններ",
@ -69,27 +69,27 @@
"column.follow_requests": "Հետեւելու հայցեր", "column.follow_requests": "Հետեւելու հայցեր",
"column.home": "Հիմնական", "column.home": "Հիմնական",
"column.lists": "Ցանկեր", "column.lists": "Ցանկեր",
"column.mutes": "Լռեցրած օգտատերեր", "column.mutes": "Լռեցրած օգտատէրեր",
"column.notifications": "Ծանուցումներ", "column.notifications": "Ծանուցումներ",
"column.pins": "Ամրացված թթեր", "column.pins": "Ամրացուած թթեր",
"column.public": "Դաշնային հոսք", "column.public": "Դաշնային հոսք",
"column_back_button.label": "Ետ", "column_back_button.label": "Ետ",
"column_header.hide_settings": "Թաքցնել կարգավորումները", "column_header.hide_settings": "Թաքցնել կարգաւորումները",
"column_header.moveLeft_settings": "Տեղաշարժել սիւնը ձախ", "column_header.moveLeft_settings": "Տեղաշարժել սիւնը ձախ",
"column_header.moveRight_settings": "Տեղաշարժել սիւնը աջ", "column_header.moveRight_settings": "Տեղաշարժել սիւնը աջ",
"column_header.pin": "Ամրացնել", "column_header.pin": "Ամրացնել",
"column_header.show_settings": "Ցուցադրել կարգավորումները", "column_header.show_settings": "Ցուցադրել կարգաւորումները",
"column_header.unpin": "Հանել", "column_header.unpin": "Հանել",
"column_subheading.settings": "Կարգավորումներ", "column_subheading.settings": "Կարգաւորումներ",
"community.column_settings.local_only": "Միայն ներքին", "community.column_settings.local_only": "Միայն տեղական",
"community.column_settings.media_only": "Media only", "community.column_settings.media_only": "Միայն մեդիա",
"community.column_settings.remote_only": "Միայն հեռակա", "community.column_settings.remote_only": "Միայն հեռակայ",
"compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.", "compose_form.direct_message_warning": "Այս թութը տեսանելի կը լինի միայն նշուած օգտատէրերին։",
"compose_form.direct_message_warning_learn_more": "Իմանալ աւելին", "compose_form.direct_message_warning_learn_more": "Իմանալ աւելին",
"compose_form.hashtag_warning": "Այս թութը չի հաշվառվի որեւէ պիտակի տակ, քանզի այն ծածուկ է։ Միայն հրապարակային թթերը հնարավոր է որոնել պիտակներով։", "compose_form.hashtag_warning": "Այս թութը չի հաշուառուի որեւէ պիտակի տակ, քանզի այն ծածուկ է։ Միայն հրապարակային թթերը հնարաւոր է որոնել պիտակներով։",
"compose_form.lock_disclaimer": "Քո հաշիւը {locked} չէ։ Իւրաքանչիւրութիւն ոք կարող է հետեւել քեզ եւ տեսնել միայն հետեւողների համար նախատեսուած գրառումները։", "compose_form.lock_disclaimer": "Քո հաշիւը {locked} չէ։ Իւրաքանչիւրութիւն ոք կարող է հետեւել քեզ եւ տեսնել միայն հետեւողների համար նախատեսուած գրառումները։",
"compose_form.lock_disclaimer.lock": "փակ", "compose_form.lock_disclaimer.lock": "փակ",
"compose_form.placeholder": "Ի՞նչ կա մտքիդ", "compose_form.placeholder": "Ի՞նչ կայ մտքիդ",
"compose_form.poll.add_option": "Աւելացնել տարբերակ", "compose_form.poll.add_option": "Աւելացնել տարբերակ",
"compose_form.poll.duration": "Հարցման տեւողութիւնը", "compose_form.poll.duration": "Հարցման տեւողութիւնը",
"compose_form.poll.option_placeholder": "Տարբերակ {number}", "compose_form.poll.option_placeholder": "Տարբերակ {number}",
@ -111,16 +111,16 @@
"confirmations.delete.confirm": "Ջնջել", "confirmations.delete.confirm": "Ջնջել",
"confirmations.delete.message": "Վստա՞հ ես, որ ուզում ես ջնջել այս թութը։", "confirmations.delete.message": "Վստա՞հ ես, որ ուզում ես ջնջել այս թութը։",
"confirmations.delete_list.confirm": "Ջնջել", "confirmations.delete_list.confirm": "Ջնջել",
"confirmations.delete_list.message": "Վստա՞հ ես, որ ուզում ես մշտապես ջնջել այս ցանկը։", "confirmations.delete_list.message": "Վստա՞հ ես, որ ուզում ես մշտապէս ջնջել այս ցանկը։",
"confirmations.domain_block.confirm": "Թաքցնել ամբողջ տիրույթը", "confirmations.domain_block.confirm": "Թաքցնել ամբողջ տիրույթը",
"confirmations.domain_block.message": "Հաստատ֊հաստա՞տ վստահ ես, որ ուզում ես արգելափակել ամբողջ {domain} տիրույթը։ Սովորաբար մի երկու թիրախավորված արգելափակում կամ լռեցում բավական է ու նախընտրելի։", "confirmations.domain_block.message": "Հաստատ֊հաստա՞տ վստահ ես, որ ուզում ես արգելափակել ամբողջ {domain} տիրոյթը։ Սովորաբար մի երկու թիրախաւորուած արգելափակում կամ լռեցում բաւական է ու նախընտրելի։",
"confirmations.logout.confirm": "Ելք", "confirmations.logout.confirm": "Ելք",
"confirmations.logout.message": "Համոզո՞ւած ես, որ ուզում ես դուրս գալ", "confirmations.logout.message": "Համոզո՞ւած ես, որ ուզում ես դուրս գալ",
"confirmations.mute.confirm": "Լռեցնել", "confirmations.mute.confirm": "Լռեցնել",
"confirmations.mute.explanation": "Սա թաքցնելու ա իրենց գրառումներն, ինչպէս նաեւ իրենց նշող գրառումներն, բայց իրենք միեւնոյն է կը կարողանան հետեւել ձեզ եւ տեսնել ձեր գրառումները։", "confirmations.mute.explanation": "Սա թաքցնելու ա իրենց գրառումներն, ինչպէս նաեւ իրենց նշող գրառումներն, բայց իրենք միեւնոյն է կը կարողանան հետեւել ձեզ եւ տեսնել ձեր գրառումները։",
"confirmations.mute.message": "Վստա՞հ ես, որ ուզում ես {name}֊ին լռեցնել։", "confirmations.mute.message": "Վստա՞հ ես, որ ուզում ես {name}֊ին լռեցնել։",
"confirmations.redraft.confirm": "Ջնջել եւ խմբագրել նորից", "confirmations.redraft.confirm": "Ջնջել եւ խմբագրել նորից",
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.", "confirmations.redraft.message": "Վստահ ե՞ս, որ ցանկանում ես ջնջել եւ վերախմբագրել այս թութը։ Դու կը կորցնես այս գրառման բոլոր պատասխանները, տարածումները եւ հաւանումները։",
"confirmations.reply.confirm": "Պատասխանել", "confirmations.reply.confirm": "Պատասխանել",
"confirmations.reply.message": "Այս պահին պատասխանելը կը չեղարկի ձեր՝ այս պահին անաւարտ հաղորդագրութիւնը։ Համոզուա՞ծ էք։", "confirmations.reply.message": "Այս պահին պատասխանելը կը չեղարկի ձեր՝ այս պահին անաւարտ հաղորդագրութիւնը։ Համոզուա՞ծ էք։",
"confirmations.unfollow.confirm": "Ապահետեւել", "confirmations.unfollow.confirm": "Ապահետեւել",
@ -134,67 +134,67 @@
"directory.new_arrivals": "Նորեկներ", "directory.new_arrivals": "Նորեկներ",
"directory.recently_active": "Վերջերս ակտիւ", "directory.recently_active": "Վերջերս ակտիւ",
"embed.instructions": "Այս թութը քո կայքում ներդնելու համար կարող ես պատճէնել ներքինանալ կոդը։", "embed.instructions": "Այս թութը քո կայքում ներդնելու համար կարող ես պատճէնել ներքինանալ կոդը։",
"embed.preview": "Ահա, թե ինչ տեսք կունենա այն՝", "embed.preview": "Ահայ, թէ ինչ տեսք կը ունենայ այն՝",
"emoji_button.activity": "Զբաղմունքներ", "emoji_button.activity": "Զբաղմունքներ",
"emoji_button.custom": "Հատուկ", "emoji_button.custom": "Յատուկ",
"emoji_button.flags": "Դրոշներ", "emoji_button.flags": "Դրօշներ",
"emoji_button.food": "Կերուխում", "emoji_button.food": "Կերուխում",
"emoji_button.label": "Էմոջի ավելացնել", "emoji_button.label": "Էմոջի աւելացնել",
"emoji_button.nature": "Բնութիւն", "emoji_button.nature": "Բնութիւն",
"emoji_button.not_found": "Նման էմոջիներ դեռ չեն հայտնաբերվել։ (╯°□°)╯︵ ┻━┻", "emoji_button.not_found": "Նման էմոջիներ դեռ չեն յայտնաբերուել։ (╯°□°)╯︵ ┻━┻",
"emoji_button.objects": "Առարկաներ", "emoji_button.objects": "Առարկաներ",
"emoji_button.people": "Մարդիկ", "emoji_button.people": "Մարդիկ",
"emoji_button.recent": "Հաճախ օգտագործվող", "emoji_button.recent": "Յաճախ օգտագործուող",
"emoji_button.search": "Որոնել…", "emoji_button.search": "Որոնել…",
"emoji_button.search_results": "Որոնման արդիւնքներ", "emoji_button.search_results": "Որոնման արդիւնքներ",
"emoji_button.symbols": "Նշաններ", "emoji_button.symbols": "Նշաններ",
"emoji_button.travel": "Ուղեւորութիւն եւ տեղանքներ", "emoji_button.travel": "Ուղեւորութիւն եւ տեղանքներ",
"empty_column.account_suspended": "Account suspended", "empty_column.account_suspended": "Հաշիւը արգելափակուած է",
"empty_column.account_timeline": "Այստեղ թթեր չկա՛ն։", "empty_column.account_timeline": "Այստեղ թթեր չկա՛ն։",
"empty_column.account_unavailable": "Անձնական էջը հասանելի չի", "empty_column.account_unavailable": "Անձնական էջը հասանելի չի",
"empty_column.blocks": "Դու դեռ ոչ մէկի չես արգելափակել։", "empty_column.blocks": "Դու դեռ ոչ մէկի չես արգելափակել։",
"empty_column.bookmarked_statuses": "Դու դեռ չունես որեւէ էջանշւած թութ։ Երբ էջանշես, դրանք կերեւան այստեղ։", "empty_column.bookmarked_statuses": "Դու դեռ չունես որեւէ էջանշւած թութ։ Երբ էջանշես, դրանք կը երեւան այստեղ։",
"empty_column.community": "Տեղական հոսքը դատա՛րկ է։ Հրապարակային մի բան գրիր շարժիչը խոդ տալու համար։", "empty_column.community": "Տեղական հոսքը դատարկ է։ Հրապարակային մի բան գրի՛ր շարժիչը գործարկելու համար։",
"empty_column.direct": "Դու դեռ չունես ոչ մի հասցէագրուած հաղորդագրութիւն։ Երբ ուղարկես կամ ստանաս որեւէ անձնական նամակ, այն այստեղ կերեւայ։", "empty_column.direct": "Դու դեռ չունես ոչ մի հասցէագրուած հաղորդագրութիւն։ Երբ ուղարկես կամ ստանաս որեւէ անձնական նամակ, այն այստեղ կերեւայ։",
"empty_column.domain_blocks": "Թաքցուած տիրոյթներ դեռ չկան։", "empty_column.domain_blocks": "Թաքցուած տիրոյթներ դեռ չկան։",
"empty_column.favourited_statuses": "Դու դեռ չունես որեւէ հաւանած թութ։ Երբ հաւանես, դրանք կերեւան այստեղ։", "empty_column.favourited_statuses": "Դու դեռ չունես որեւէ հաւանած թութ։ Երբ հաւանես, դրանք կերեւան այստեղ։",
"empty_column.favourites": "Այս թութը ոչ մէկ դեռ չի հաւանել։ Հաւանողները կերեւան այստեղ, երբ նշեն թութը հաւանած։", "empty_column.favourites": "Այս թութը ոչ մէկ դեռ չի հաւանել։ Հաւանողները կերեւան այստեղ, երբ նշեն թութը հաւանած։",
"empty_column.follow_requests": "Դու դեռ չունես որեւէ հետեւելու յայտ։ Բոլոր նման յայտերը կը յայտնուեն այստեղ։", "empty_column.follow_requests": "Դու դեռ չունես որեւէ հետեւելու յայտ։ Բոլոր նման յայտերը կը յայտնուեն այստեղ։",
"empty_column.hashtag": "Այս պիտակով դեռ ոչինչ չկա։", "empty_column.hashtag": "Այս պիտակով դեռ ոչինչ չկայ։",
"empty_column.home": "Քո հիմնական հոսքը դատա՛րկ է։ Այցելի՛ր {public}ը կամ օգտվիր որոնումից՝ այլ մարդկանց հանդիպելու համար։", "empty_column.home": "Քո հիմնական հոսքը դատարկ է։ Այցելի՛ր {public}ը կամ օգտուիր որոնումից՝ այլ մարդկանց հանդիպելու համար։",
"empty_column.home.public_timeline": "հրապարակային հոսք", "empty_column.home.public_timeline": "հրապարակային հոսք",
"empty_column.list": "Այս ցանկում դեռ ոչինչ չկա։ Երբ ցանկի անդամներից որեւէ մեկը նոր թութ գրի, այն կհայտնվի այստեղ։", "empty_column.list": "Այս ցանկում դեռ ոչինչ չկայ։ Երբ ցանկի անդամներից որեւէ մեկը նոր թութ գրի, այն կը յայտնուի այստեղ։",
"empty_column.lists": "Դուք դեռ չունեք ստեղծած ցանկ։ Ցանկ ստեղծելուն պես այն կհայտնվի այստեղ։", "empty_column.lists": "Դուք դեռ չունէք ստեղծած ցանկ։ Ցանկ ստեղծելուն պէս այն կը յայտնուի այստեղ։",
"empty_column.mutes": "Առայժմ ոչ ոքի չեք լռեցրել։", "empty_column.mutes": "Առայժմ ոչ ոքի չէք լռեցրել։",
"empty_column.notifications": "Ոչ մի ծանուցում դեռ չունես։ Բզիր միւսներին՝ խօսակցութիւնը սկսելու համար։", "empty_column.notifications": "Ոչ մի ծանուցում դեռ չունես։ Բզիր միւսներին՝ խօսակցութիւնը սկսելու համար։",
"empty_column.public": "Այստեղ բան չկա՛յ։ Հրապարակային մի բան գրիր կամ հետեւիր այլ հանգոյցներից էակների՝ այն լցնելու համար։", "empty_column.public": "Այստեղ բան չկա՛յ։ Հրապարակային մի բան գրիր կամ հետեւիր այլ հանգոյցներից էակների՝ այն լցնելու համար։",
"error.unexpected_crash.explanation": "Մեր ծրագրակազմում վրիպակի կամ դիտարկչի անհամատեղելիութեան պատճառով այս էջը չի կարող լիարժէք պատկերուել։", "error.unexpected_crash.explanation": "Մեր ծրագրակազմում վրիպակի կամ դիտարկչի անհամատեղելիութեան պատճառով այս էջը չի կարող լիարժէք պատկերուել։",
"error.unexpected_crash.explanation_addons": "Այս էջի ճիշտ պատկերումը չի ստացում։ Խափանումը հաւանաբար առաջացել է դիտարկիչի յավելվածից կամ առցանց թարգմանիչից։", "error.unexpected_crash.explanation_addons": "Այս էջի ճիշտ պատկերումը չի ստացում։ Խափանումը հաւանաբար առաջացել է դիտարկիչի յավելվածից կամ առցանց թարգմանիչից։",
"error.unexpected_crash.next_steps": "Փորձիր թարմացնել էջը։ Եթե դա չօգնի ապա կարող ես օգտվել Մաստադոնից ուրիշ դիտարկիչով կամ հավելվածով։", "error.unexpected_crash.next_steps": "Փորձիր թարմացնել էջը։ Եթէ դա չօգնի ապա կարող ես օգտուել Մաստադոնից ուրիշ դիտարկիչով կամ յաւելուածով։",
"error.unexpected_crash.next_steps_addons": "Փորձիր անջատել յաւելուածները եւ թարմացնել էջը։ Եթե դա չօգնի, կարող ես օգտուել Մաստադոնից այլ դիտարկիչով կամ յաւելուածով։", "error.unexpected_crash.next_steps_addons": "Փորձիր անջատել յաւելուածները եւ թարմացնել էջը։ Եթե դա չօգնի, կարող ես օգտուել Մաստադոնից այլ դիտարկիչով կամ յաւելուածով։",
"errors.unexpected_crash.copy_stacktrace": "Պատճենել սթաքթրեյսը սեղմատախտակին", "errors.unexpected_crash.copy_stacktrace": "Պատճենել սթաքթրեյսը սեղմատախտակին",
"errors.unexpected_crash.report_issue": "Զեկուցել խնդրի մասին", "errors.unexpected_crash.report_issue": "Զեկուցել խնդրի մասին",
"follow_request.authorize": "Վավերացնել", "follow_request.authorize": "Վաւերացնել",
"follow_request.reject": "Մերժել", "follow_request.reject": "Մերժել",
"follow_requests.unlocked_explanation": "Այս հարցումը ուղարկված է հաշվից, որի համար {domain}-ի անձնակազմը միացրել է ձեռքով ստուգում։", "follow_requests.unlocked_explanation": "Այս հարցումը ուղարկուած է հաշուից, որի համար {domain}-ի անձնակազմը միացրել է ձեռքով ստուգում։",
"generic.saved": "Պահպանված է", "generic.saved": "Պահպանուած է",
"getting_started.developers": "Մշակողներ", "getting_started.developers": "Մշակողներ",
"getting_started.directory": "Օգտատէրերի շտեմարան", "getting_started.directory": "Օգտատէրերի շտեմարան",
"getting_started.documentation": "Փաստաթղթեր", "getting_started.documentation": "Փաստաթղթեր",
"getting_started.heading": "Ինչպես սկսել", "getting_started.heading": "Ինչպէս սկսել",
"getting_started.invite": "Հրաւիրել մարդկանց", "getting_started.invite": "Հրաւիրել մարդկանց",
"getting_started.open_source_notice": "Մաստոդոնը բաց ելատեքստով ծրագրակազմ է։ Կարող ես ներդրում անել կամ վրեպներ զեկուցել ԳիթՀաբում՝ {github}։", "getting_started.open_source_notice": "Մաստոդոնը բաց ելատեքստով ծրագրակազմ է։ Կարող ես ներդրում անել կամ վրէպներ զեկուցել ԳիթՀաբում՝ {github}։",
"getting_started.security": "Հաշուի կարգաւորումներ", "getting_started.security": "Հաշուի կարգաւորումներ",
"getting_started.terms": "Ծառայութեան պայմանները", "getting_started.terms": "Ծառայութեան պայմանները",
"hashtag.column_header.tag_mode.all": "եւ {additional}", "hashtag.column_header.tag_mode.all": "եւ {additional}",
"hashtag.column_header.tag_mode.any": "կամ {additional}", "hashtag.column_header.tag_mode.any": "կամ {additional}",
"hashtag.column_header.tag_mode.none": "առանց {additional}", "hashtag.column_header.tag_mode.none": "առանց {additional}",
"hashtag.column_settings.select.no_options_message": "Առաջարկներ չկան", "hashtag.column_settings.select.no_options_message": "Առաջարկներ չկան",
"hashtag.column_settings.select.placeholder": վելացրու հեշթեգեր…", "hashtag.column_settings.select.placeholder": ւելացրու պիտկներ…",
"hashtag.column_settings.tag_mode.all": "Բոլորը", "hashtag.column_settings.tag_mode.all": "Բոլորը",
"hashtag.column_settings.tag_mode.any": "Ցանկացածը", "hashtag.column_settings.tag_mode.any": "Ցանկացածը",
"hashtag.column_settings.tag_mode.none": "Ոչ մեկը", "hashtag.column_settings.tag_mode.none": "Ոչ մեկը",
"hashtag.column_settings.tag_toggle": "Include additional tags in this column", "hashtag.column_settings.tag_toggle": "Ներառել լրացուցիչ պիտակները այս սիւնակում ",
"home.column_settings.basic": "Հիմնական", "home.column_settings.basic": "Հիմնական",
"home.column_settings.show_reblogs": "Ցուցադրել տարածածները", "home.column_settings.show_reblogs": "Ցուցադրել տարածածները",
"home.column_settings.show_replies": "Ցուցադրել պատասխանները", "home.column_settings.show_replies": "Ցուցադրել պատասխանները",
@ -202,17 +202,17 @@
"home.show_announcements": "Ցուցադրել յայտարարութիւնները", "home.show_announcements": "Ցուցադրել յայտարարութիւնները",
"intervals.full.days": "{number, plural, one {# օր} other {# օր}}", "intervals.full.days": "{number, plural, one {# օր} other {# օր}}",
"intervals.full.hours": "{number, plural, one {# ժամ} other {# ժամ}}", "intervals.full.hours": "{number, plural, one {# ժամ} other {# ժամ}}",
"intervals.full.minutes": "{number, plural, one {# րոպե} other {# րոպե}}", "intervals.full.minutes": "{number, plural, one {# րոպէ} other {# րոպէ}}",
"introduction.federation.action": "Հաջորդ", "introduction.federation.action": "Յաջորդ",
"introduction.federation.federated.headline": "Դաշնային", "introduction.federation.federated.headline": "Դաշնային",
"introduction.federation.federated.text": "Դաշնեզերքի հարեւան հանգոյցների հանրային գրառումները կը յայտնուեն դաշնային հոսքում։", "introduction.federation.federated.text": "Դաշնեզերքի հարեւան հանգոյցների հանրային գրառումները կը յայտնուեն դաշնային հոսքում։",
"introduction.federation.home.headline": "Հիմնական", "introduction.federation.home.headline": "Հիմնական",
"introduction.federation.home.text": "Այն անձանց թթերը ում հետևում ես, կը յայտնուեն հիմնական հոսքում։ Դու կարող ես հետեւել ցանկացած անձի ցանկացած հանգոյցից։", "introduction.federation.home.text": "Այն անձանց թթերը ում հետևում ես, կը յայտնուեն հիմնական հոսքում։ Դու կարող ես հետեւել ցանկացած անձի ցանկացած հանգոյցից։",
"introduction.federation.local.headline": "Տեղային", "introduction.federation.local.headline": "Տեղային",
"introduction.federation.local.text": "Տեղական հոսքում կարող ես տեսնել քո հանգոյցի բոլոր հանրային գրառումները։", "introduction.federation.local.text": "Տեղական հոսքում կարող ես տեսնել քո հանգոյցի բոլոր հանրային գրառումները։",
"introduction.interactions.action": "Finish toot-orial!", "introduction.interactions.action": "Աւարտել թթի դասընթացը",
"introduction.interactions.favourite.headline": "Նախընտրելի", "introduction.interactions.favourite.headline": "Նախընտրելի",
"introduction.interactions.favourite.text": "Փոխանցիր հեղինակին որ քեզ դուր է եկել իր թութը հավանելով այն։", "introduction.interactions.favourite.text": "Փոխանցիր հեղինակին որ քեզ դուր է եկել իր թութը հաւանելով այն։",
"introduction.interactions.reblog.headline": "Տարածել", "introduction.interactions.reblog.headline": "Տարածել",
"introduction.interactions.reblog.text": "Կիսիր այլ օգտատէրերի թութերը քո հետեւողների հետ տարածելով դրանք քո անձնական էջում։", "introduction.interactions.reblog.text": "Կիսիր այլ օգտատէրերի թութերը քո հետեւողների հետ տարածելով դրանք քո անձնական էջում։",
"introduction.interactions.reply.headline": "Պատասխանել", "introduction.interactions.reply.headline": "Պատասխանել",
@ -220,25 +220,25 @@
"introduction.welcome.action": "Գնացի՜նք։", "introduction.welcome.action": "Գնացի՜նք։",
"introduction.welcome.headline": "Առաջին քայլեր", "introduction.welcome.headline": "Առաջին քայլեր",
"introduction.welcome.text": "Դաշնեզերքը ողջունում է ձեզ։ Շուտով կը կարողանաս ուղարկել նամակներ ու շփուել տարբեր հանգոյցների ընկերներիդ հետ։ Բայց մտապահիր {domain} հանգոյցը, այն իւրայատուկ է, այստեղ է պահւում քո հաշիւը։", "introduction.welcome.text": "Դաշնեզերքը ողջունում է ձեզ։ Շուտով կը կարողանաս ուղարկել նամակներ ու շփուել տարբեր հանգոյցների ընկերներիդ հետ։ Բայց մտապահիր {domain} հանգոյցը, այն իւրայատուկ է, այստեղ է պահւում քո հաշիւը։",
"keyboard_shortcuts.back": "ետ նավարկելու համար", "keyboard_shortcuts.back": "ետ նաւարկելու համար",
"keyboard_shortcuts.blocked": "արգելափակված օգտատերերի ցանկը բացելու համար", "keyboard_shortcuts.blocked": "արգելափակուած օգտատէրերի ցանկը բացելու համար",
"keyboard_shortcuts.boost": "տարածելու համար", "keyboard_shortcuts.boost": "տարածելու համար",
"keyboard_shortcuts.column": "սիւներից մէկի վրայ սեւեռուելու համար", "keyboard_shortcuts.column": "սիւներից մէկի վրայ սեւեռուելու համար",
"keyboard_shortcuts.compose": "շարադրման տիրույթին սեւեռվելու համար", "keyboard_shortcuts.compose": "շարադրման տիրոյթին սեւեռուելու համար",
"keyboard_shortcuts.description": "Նկարագրութիւն", "keyboard_shortcuts.description": "Նկարագրութիւն",
"keyboard_shortcuts.direct": "հասցեագրված գրվածքների հոսքը բացելու համար", "keyboard_shortcuts.direct": "հասցէագրուած գրուածքների հոսքը բացելու համար",
"keyboard_shortcuts.down": "ցանկով ներքեւ շարժվելու համար", "keyboard_shortcuts.down": "ցանկով ներքեւ շարժուելու համար",
"keyboard_shortcuts.enter": "թութը բացելու համար", "keyboard_shortcuts.enter": "թութը բացելու համար",
"keyboard_shortcuts.favourite": "հավանելու համար", "keyboard_shortcuts.favourite": "հաւանելու համար",
"keyboard_shortcuts.favourites": "էջանիշերի ցուցակը բացելու համար", "keyboard_shortcuts.favourites": "էջանիշերի ցուցակը բացելու համար",
"keyboard_shortcuts.federated": "դաշնային հոսքին անցնելու համար", "keyboard_shortcuts.federated": "դաշնային հոսքին անցնելու համար",
"keyboard_shortcuts.heading": "Ստեղնաշարի կարճատներ", "keyboard_shortcuts.heading": "Ստեղնաշարի կարճատներ",
"keyboard_shortcuts.home": "անձնական հոսքին անցնելու համար", "keyboard_shortcuts.home": "անձնական հոսքին անցնելու համար",
"keyboard_shortcuts.hotkey": "Հատուկ ստեղն", "keyboard_shortcuts.hotkey": "Յատուկ ստեղն",
"keyboard_shortcuts.legend": "այս ձեռնարկը ցուցադրելու համար", "keyboard_shortcuts.legend": "այս ձեռնարկը ցուցադրելու համար",
"keyboard_shortcuts.local": "տեղական հոսքին անցնելու համար", "keyboard_shortcuts.local": "տեղական հոսքին անցնելու համար",
"keyboard_shortcuts.mention": "հեղինակին նշելու համար", "keyboard_shortcuts.mention": "հեղինակին նշելու համար",
"keyboard_shortcuts.muted": "լռեցված օգտատերերի ցանկը բացելու համար", "keyboard_shortcuts.muted": "լռեցուած օգտատէրերի ցանկը բացելու համար",
"keyboard_shortcuts.my_profile": "սեփական էջին անցնելու համար", "keyboard_shortcuts.my_profile": "սեփական էջին անցնելու համար",
"keyboard_shortcuts.notifications": "ծանուցումների սիւնակը բացելու համար", "keyboard_shortcuts.notifications": "ծանուցումների սիւնակը բացելու համար",
"keyboard_shortcuts.open_media": "ցուցադրել մեդիան", "keyboard_shortcuts.open_media": "ցուցադրել մեդիան",
@ -247,41 +247,41 @@
"keyboard_shortcuts.reply": "պատասխանելու համար", "keyboard_shortcuts.reply": "պատասխանելու համար",
"keyboard_shortcuts.requests": "հետեւելու հայցերի ցանկը դիտելու համար", "keyboard_shortcuts.requests": "հետեւելու հայցերի ցանկը դիտելու համար",
"keyboard_shortcuts.search": "որոնման դաշտին սեւեռվելու համար", "keyboard_shortcuts.search": "որոնման դաշտին սեւեռվելու համար",
"keyboard_shortcuts.spoilers": "որպեսզի ցուցադրվի/թաքցվի CW դաշտը", "keyboard_shortcuts.spoilers": "որպէսզի ցուցադրուի/թաքցուի CW դաշտը",
"keyboard_shortcuts.start": "«սկսել» սիւնակը բացելու համար", "keyboard_shortcuts.start": "«սկսել» սիւնակը բացելու համար",
"keyboard_shortcuts.toggle_hidden": "CW֊ի ետեւի տեքստը ցուցադրել֊թաքցնելու համար", "keyboard_shortcuts.toggle_hidden": "CW֊ի ետեւի տեքստը ցուցադրել֊թաքցնելու համար",
"keyboard_shortcuts.toggle_sensitivity": "մեդիան ցուցադրել֊թաքցնելու համար", "keyboard_shortcuts.toggle_sensitivity": "մեդիան ցուցադրել֊թաքցնելու համար",
"keyboard_shortcuts.toot": "թարմ թութ սկսելու համար", "keyboard_shortcuts.toot": "թարմ թութ սկսելու համար",
"keyboard_shortcuts.unfocus": "տեքստի/որոնման տիրույթից ապասեւեռվելու համար", "keyboard_shortcuts.unfocus": "տեքստի/որոնման տիրոյթից ապասեւեռուելու համար",
"keyboard_shortcuts.up": "ցանկով վերեւ շարժվելու համար", "keyboard_shortcuts.up": "ցանկով վերեւ շարժուելու համար",
"lightbox.close": "Փակել", "lightbox.close": "Փակել",
"lightbox.compress": "Compress image view box", "lightbox.compress": "Փակել պատկերի դիտման պատուհանը",
"lightbox.expand": "Expand image view box", "lightbox.expand": "Բացել պատկերի դիտման պատուհանը",
"lightbox.next": "Հաջորդ", "lightbox.next": "Յաջորդ",
"lightbox.previous": "Նախորդ", "lightbox.previous": "Նախորդ",
"lists.account.add": վելացնել ցանկին", "lists.account.add": ւելացնել ցանկին",
"lists.account.remove": "Հանել ցանկից", "lists.account.remove": "Հանել ցանկից",
"lists.delete": "Ջնջել ցանկը", "lists.delete": "Ջնջել ցանկը",
"lists.edit": "Փոփոխել ցանկը", "lists.edit": "Փոփոխել ցանկը",
"lists.edit.submit": "Փոխել վերնագիրը", "lists.edit.submit": "Փոխել վերնագիրը",
"lists.new.create": վելացնել ցանկ", "lists.new.create": ւելացնել ցանկ",
"lists.new.title_placeholder": "Նոր ցանկի վերնագիր", "lists.new.title_placeholder": "Նոր ցանկի վերնագիր",
"lists.replies_policy.followed": "Any followed user", "lists.replies_policy.followed": "Ցանկացած հետեւող օգտատէր",
"lists.replies_policy.list": "Members of the list", "lists.replies_policy.list": "Ցանկի անդամներ",
"lists.replies_policy.none": "Ոչ ոք", "lists.replies_policy.none": "Ոչ ոք",
"lists.replies_policy.title": "Show replies to:", "lists.replies_policy.title": "Ցուցադրել պատասխանները՝",
"lists.search": "Փնտրել քո հետեւած մարդկանց մեջ", "lists.search": "Փնտրել քո հետեւած մարդկանց մէջ",
"lists.subheading": "Քո ցանկերը", "lists.subheading": "Քո ցանկերը",
"load_pending": "{count, plural, one {# նոր նիւթ} other {# նոր նիւթ}}", "load_pending": "{count, plural, one {# նոր նիւթ} other {# նոր նիւթ}}",
"loading_indicator.label": "Բեռնվում է…", "loading_indicator.label": "Բեռնւում է…",
"media_gallery.toggle_visible": "Ցուցադրել/թաքցնել", "media_gallery.toggle_visible": "Ցուցադրել/թաքցնել",
"missing_indicator.label": "Չգտնվեց", "missing_indicator.label": "Չգտնուեց",
"missing_indicator.sublabel": "Պաշարը չի գտնւում", "missing_indicator.sublabel": "Պաշարը չի գտնւում",
"mute_modal.duration": "Տևողություն", "mute_modal.duration": "Տեւողութիւն",
"mute_modal.hide_notifications": "Թաքցնե՞լ ցանուցումներն այս օգտատիրոջից։", "mute_modal.hide_notifications": "Թաքցնե՞լ ցանուցումներն այս օգտատիրոջից։",
"mute_modal.indefinite": "Անժամկետ", "mute_modal.indefinite": "Անժամկէտ",
"navigation_bar.apps": "Դիւրակիր յաւելուածներ", "navigation_bar.apps": "Դիւրակիր յաւելուածներ",
"navigation_bar.blocks": "Արգելափակված օգտատերեր", "navigation_bar.blocks": "Արգելափակուած օգտատէրեր",
"navigation_bar.bookmarks": "Էջանիշեր", "navigation_bar.bookmarks": "Էջանիշեր",
"navigation_bar.community_timeline": "Տեղական հոսք", "navigation_bar.community_timeline": "Տեղական հոսք",
"navigation_bar.compose": "Գրել նոր թութ", "navigation_bar.compose": "Գրել նոր թութ",
@ -297,13 +297,13 @@
"navigation_bar.keyboard_shortcuts": "Ստեղնաշարի կարճատներ", "navigation_bar.keyboard_shortcuts": "Ստեղնաշարի կարճատներ",
"navigation_bar.lists": "Ցանկեր", "navigation_bar.lists": "Ցանկեր",
"navigation_bar.logout": "Դուրս գալ", "navigation_bar.logout": "Դուրս գալ",
"navigation_bar.mutes": "Լռեցրած օգտատերեր", "navigation_bar.mutes": "Լռեցրած օգտատէրեր",
"navigation_bar.personal": "Անձնական", "navigation_bar.personal": "Անձնական",
"navigation_bar.pins": "Ամրացված թթեր", "navigation_bar.pins": "Ամրացուած թթեր",
"navigation_bar.preferences": "Նախապատուութիւններ", "navigation_bar.preferences": "Նախապատուութիւններ",
"navigation_bar.public_timeline": "Դաշնային հոսք", "navigation_bar.public_timeline": "Դաշնային հոսք",
"navigation_bar.security": "Անվտանգութիւն", "navigation_bar.security": "Անվտանգութիւն",
"notification.favourite": "{name} հավանեց թութդ", "notification.favourite": "{name} հաւանեց թութդ",
"notification.follow": "{name} սկսեց հետեւել քեզ", "notification.follow": "{name} սկսեց հետեւել քեզ",
"notification.follow_request": "{name} քեզ հետեւելու հայց է ուղարկել", "notification.follow_request": "{name} քեզ հետեւելու հայց է ուղարկել",
"notification.mention": "{name} նշեց քեզ", "notification.mention": "{name} նշեց քեզ",
@ -333,17 +333,17 @@
"notifications.filter.follows": "Հետեւածները", "notifications.filter.follows": "Հետեւածները",
"notifications.filter.mentions": "Նշումները", "notifications.filter.mentions": "Նշումները",
"notifications.filter.polls": "Հարցման արդիւնքները", "notifications.filter.polls": "Հարցման արդիւնքները",
"notifications.filter.statuses": "Updates from people you follow", "notifications.filter.statuses": "Թարմացումներ հետեւորդներից",
"notifications.grant_permission": "Թոյլատրել։", "notifications.grant_permission": "Թոյլատրել։",
"notifications.group": "{count} ծանուցում", "notifications.group": "{count} ծանուցում",
"notifications.mark_as_read": "Համարել բոլոր ծանուցումները ընթերցած", "notifications.mark_as_read": "Համարել բոլոր ծանուցումները ընթերցած",
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied": "Աշխատատիրոյթի ծանուցումներն անհասանելի են՝ դիտարկչի նախկինում մերժուած թոյլտուութիւնների հայցման հետեւանքով",
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", "notifications.permission_denied_alert": "Աշխատատիրոյթի ծանուցումները չեն կարող միացուել, քանի որ դիտարկչի թոյլտուութիւնները նախկինում մերժուել են",
"notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications.permission_required": "Աշխատատիրոյթի ծանուցումներն անհասանելի են, քանի որ անհրաժեշտ թոյլտուութիւնները բացակայում են։",
"notifications_permission_banner.enable": "Միացնել դիտարկչից ծանուցումները", "notifications_permission_banner.enable": "Միացնել դիտարկչից ծանուցումները",
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.how_to_control": "Ծանուցումներ ստանալու համար, երբ Մաստոդոնը բաց չէ՝ ակտիւացրու աշխատատիրոյթի ծանուցումները։ Դու կարող ես ճշգրտօրէն վերահսկել թէ ինչպիսի փոխգործակցութիւններ առաջանան աշխատատիրոյթի ծանուցումներից՝ {icon}ի կոճակով՝ այն ակտիւացնելուց յետոյ։",
"notifications_permission_banner.title": "Never miss a thing", "notifications_permission_banner.title": "Ոչինչ բաց մի թող",
"picture_in_picture.restore": "Հետ բերել", "picture_in_picture.restore": "Յետ բերել",
"poll.closed": "Փակ", "poll.closed": "Փակ",
"poll.refresh": "Թարմացնել", "poll.refresh": "Թարմացնել",
"poll.total_people": "{count, plural, one {# հոգի} other {# հոգի}}", "poll.total_people": "{count, plural, one {# հոգի} other {# հոգի}}",
@ -353,8 +353,8 @@
"poll_button.add_poll": "Աւելացնել հարցում", "poll_button.add_poll": "Աւելացնել հարցում",
"poll_button.remove_poll": "Հեռացնել հարցումը", "poll_button.remove_poll": "Հեռացնել հարցումը",
"privacy.change": "Կարգաւորել թթի գաղտնիութիւնը", "privacy.change": "Կարգաւորել թթի գաղտնիութիւնը",
"privacy.direct.long": "Թթել միայն նշված օգտատերերի համար", "privacy.direct.long": "Թթել միայն նշուած օգտատէրերի համար",
"privacy.direct.short": "Հասցեագրված", "privacy.direct.short": "Հասցէագրուած",
"privacy.private.long": "Թթել միայն հետեւողների համար", "privacy.private.long": "Թթել միայն հետեւողների համար",
"privacy.private.short": "Միայն հետեւողներին", "privacy.private.short": "Միայն հետեւողներին",
"privacy.public.long": "Թթել հրապարակային հոսքերում", "privacy.public.long": "Թթել հրապարակային հոսքերում",
@ -378,12 +378,12 @@
"report.submit": "Ուղարկել", "report.submit": "Ուղարկել",
"report.target": "Բողոքել {target}֊ի մասին", "report.target": "Բողոքել {target}֊ի մասին",
"search.placeholder": "Փնտրել", "search.placeholder": "Փնտրել",
"search_popout.search_format": "Փնտրելու առաջադեմ ձեւ", "search_popout.search_format": "Փնտրելու առաջադէմ ձեւ",
"search_popout.tips.full_text": "Պարզ տեքստը վերադարձնում է գրառումներդ, հաւանածներդ, տարածածներդ, որտեղ ես նշուած եղել, ինչպէս նաեւ նման օգտանուններ, անուններ եւ պիտակներ։", "search_popout.tips.full_text": "Պարզ տեքստը վերադարձնում է գրառումներդ, հաւանածներդ, տարածածներդ, որտեղ ես նշուած եղել, ինչպէս նաեւ նման օգտանուններ, անուններ եւ պիտակներ։",
"search_popout.tips.hashtag": "պիտակ", "search_popout.tips.hashtag": "պիտակ",
"search_popout.tips.status": "թութ", "search_popout.tips.status": "թութ",
"search_popout.tips.text": "Հասարակ տեքստը կվերադարձնի համընկնող անուններ, օգտանուններ ու պիտակներ", "search_popout.tips.text": "Հասարակ տեքստը կը վերադարձնի համընկնող անուններ, օգտանուններ ու պիտակներ",
"search_popout.tips.user": "օգտատեր", "search_popout.tips.user": "օգտատէր",
"search_results.accounts": "Մարդիկ", "search_results.accounts": "Մարդիկ",
"search_results.hashtags": "Պիտակներ", "search_results.hashtags": "Պիտակներ",
"search_results.statuses": "Թթեր", "search_results.statuses": "Թթեր",
@ -394,14 +394,14 @@
"status.block": "Արգելափակել @{name}֊ին", "status.block": "Արգելափակել @{name}֊ին",
"status.bookmark": "Էջանիշ", "status.bookmark": "Էջանիշ",
"status.cancel_reblog_private": "Ապատարածել", "status.cancel_reblog_private": "Ապատարածել",
"status.cannot_reblog": "Այս թութը չի կարող տարածվել", "status.cannot_reblog": "Այս թութը չի կարող տարածուել",
"status.copy": "Պատճենել գրառման հղումը", "status.copy": "Պատճէնել գրառման յղումը",
"status.delete": "Ջնջել", "status.delete": "Ջնջել",
"status.detailed_status": "Շղթայի ընդլայնված դիտում", "status.detailed_status": "Շղթայի ընդլայնուած դիտում",
"status.direct": "Նամակ գրել {name} -ին", "status.direct": "Նամակ գրել {name} -ին",
"status.embed": "Ներդնել", "status.embed": "Ներդնել",
"status.favourite": "Հավանել", "status.favourite": "Հաւանել",
"status.filtered": "Զտված", "status.filtered": "Զտուած",
"status.load_more": "Բեռնել աւելին", "status.load_more": "Բեռնել աւելին",
"status.media_hidden": "մեդիաբովանդակութիւնը թաքցուած է", "status.media_hidden": "մեդիաբովանդակութիւնը թաքցուած է",
"status.mention": "Նշել @{name}֊ին", "status.mention": "Նշել @{name}֊ին",
@ -410,7 +410,7 @@
"status.mute_conversation": "Լռեցնել խօսակցութիւնը", "status.mute_conversation": "Լռեցնել խօսակցութիւնը",
"status.open": "Ընդարձակել այս թութը", "status.open": "Ընդարձակել այս թութը",
"status.pin": "Ամրացնել անձնական էջում", "status.pin": "Ամրացնել անձնական էջում",
"status.pinned": "Ամրացված թութ", "status.pinned": "Ամրացուած թութ",
"status.read_more": "Կարդալ աւելին", "status.read_more": "Կարդալ աւելին",
"status.reblog": "Տարածել", "status.reblog": "Տարածել",
"status.reblog_private": "Տարածել սեփական լսարանին", "status.reblog_private": "Տարածել սեփական լսարանին",
@ -419,10 +419,10 @@
"status.redraft": "Ջնջել եւ վերակազմել", "status.redraft": "Ջնջել եւ վերակազմել",
"status.remove_bookmark": "Հեռացնել էջանիշերից", "status.remove_bookmark": "Հեռացնել էջանիշերից",
"status.reply": "Պատասխանել", "status.reply": "Պատասխանել",
"status.replyAll": "Պատասխանել թելին", "status.replyAll": "Պատասխանել շղթային",
"status.report": "Բողոքել @{name}֊ից", "status.report": "Բողոքել @{name}֊ից",
"status.sensitive_warning": "Կասկածելի բովանդակութիւն", "status.sensitive_warning": "Կասկածելի բովանդակութիւն",
"status.share": "Կիսվել", "status.share": "Կիսուել",
"status.show_less": "Պակաս", "status.show_less": "Պակաս",
"status.show_less_all": "Թաքցնել բոլոր նախազգուշացնումները", "status.show_less_all": "Թաքցնել բոլոր նախազգուշացնումները",
"status.show_more": "Աւելին", "status.show_more": "Աւելին",
@ -432,7 +432,7 @@
"status.unmute_conversation": "Ապալռեցնել խօսակցութիւնը", "status.unmute_conversation": "Ապալռեցնել խօսակցութիւնը",
"status.unpin": "Հանել անձնական էջից", "status.unpin": "Հանել անձնական էջից",
"suggestions.dismiss": "Անտեսել առաջարկը", "suggestions.dismiss": "Անտեսել առաջարկը",
"suggestions.header": "Միգուցե քեզ հետաքրքրի…", "suggestions.header": "Միգուցէ քեզ հետաքրքրի…",
"tabs_bar.federated_timeline": "Դաշնային", "tabs_bar.federated_timeline": "Դաշնային",
"tabs_bar.home": "Հիմնական", "tabs_bar.home": "Հիմնական",
"tabs_bar.local_timeline": "Տեղական", "tabs_bar.local_timeline": "Տեղական",
@ -440,41 +440,41 @@
"tabs_bar.search": "Փնտրել", "tabs_bar.search": "Փնտրել",
"time_remaining.days": "{number, plural, one {մնաց # օր} other {մնաց # օր}}", "time_remaining.days": "{number, plural, one {մնաց # օր} other {մնաց # օր}}",
"time_remaining.hours": "{number, plural, one {# ժամ} other {# ժամ}} անց", "time_remaining.hours": "{number, plural, one {# ժամ} other {# ժամ}} անց",
"time_remaining.minutes": "{number, plural, one {# րոպե} other {# րոպե}} անց", "time_remaining.minutes": "{number, plural, one {# րոպէ} other {# րոպէ}} անց",
"time_remaining.moments": "Մնացել է մի քանի վարկեան", "time_remaining.moments": "Մնացել է մի քանի վարկեան",
"time_remaining.seconds": "{number, plural, one {# վարկեան} other {# վարկեան}} անց", "time_remaining.seconds": "{number, plural, one {# վարկեան} other {# վարկեան}} անց",
"timeline_hint.remote_resource_not_displayed": "{resource} այլ սպասարկիչներից չեն ցուցադրվել:", "timeline_hint.remote_resource_not_displayed": "{resource} այլ սպասարկիչներից չեն ցուցադրվել:",
"timeline_hint.resources.followers": "Հետևորդներ", "timeline_hint.resources.followers": "Հետևորդներ",
"timeline_hint.resources.follows": "Հետևել", "timeline_hint.resources.follows": "Հետեւել",
"timeline_hint.resources.statuses": "Հին թութեր", "timeline_hint.resources.statuses": "Հին թութեր",
"trends.counter_by_accounts": "{count, plural, one {{counter} մարդ} other {{counter} մարդիկ}} խօսում են", "trends.counter_by_accounts": "{count, plural, one {{counter} մարդ} other {{counter} մարդիկ}} խօսում են",
"trends.trending_now": "Այժմ արդիական", "trends.trending_now": "Այժմ արդիական",
"ui.beforeunload": "Քո սեւագիրը կկորի, եթե լքես Մաստոդոնը։", "ui.beforeunload": "Քո սեւագիրը կը կորի, եթէ լքես Մաստոդոնը։",
"units.short.billion": "{count}մլրդ", "units.short.billion": "{count}մլրդ",
"units.short.million": "{count}մլն", "units.short.million": "{count}մլն",
"units.short.thousand": "{count}Հազ.", "units.short.thousand": "{count}Հազ.",
"upload_area.title": "Քաշիր ու նետիր՝ վերբեռնելու համար", "upload_area.title": "Քաշիր ու նետիր՝ վերբեռնելու համար",
"upload_button.label": վելացնել մեդիա", "upload_button.label": ւելացնել մեդիա",
"upload_error.limit": "Ֆայլի վերբեռնման սահմանաչափը գերազանցված է։", "upload_error.limit": "Նիշքի վերբեռնման սահմանաչափը գերազանցուած է։",
"upload_error.poll": "Հարցումների հետ նիշք կցել հնարաւոր չէ։", "upload_error.poll": "Հարցումների հետ նիշք կցել հնարաւոր չէ։",
"upload_form.audio_description": "Նկարագրիր ձայնագրութեան բովանդակութիւնը լսողական խնդիրներով անձանց համար", "upload_form.audio_description": "Նկարագրիր ձայնագրութեան բովանդակութիւնը լսողական խնդիրներով անձանց համար",
"upload_form.description": "Նկարագիր՝ տեսողական խնդիրներ ունեցողների համար", "upload_form.description": "Նկարագիր՝ տեսողական խնդիրներ ունեցողների համար",
"upload_form.edit": "Խմբագրել", "upload_form.edit": "Խմբագրել",
"upload_form.thumbnail": "Փոխել պատկերակը", "upload_form.thumbnail": "Փոխել պատկերակը",
"upload_form.undo": "Հետարկել", "upload_form.undo": "Յետարկել",
"upload_form.video_description": "Նկարագրիր տեսանիւթը լսողական կամ տեսողական խնդիրներով անձանց համար", "upload_form.video_description": "Նկարագրիր տեսանիւթը լսողական կամ տեսողական խնդիրներով անձանց համար",
"upload_modal.analyzing_picture": "Լուսանկարի վերլուծում…", "upload_modal.analyzing_picture": "Լուսանկարի վերլուծում…",
"upload_modal.apply": "Կիրառել", "upload_modal.apply": "Կիրառել",
"upload_modal.choose_image": "Ընտրել նկար", "upload_modal.choose_image": "Ընտրել նկար",
"upload_modal.description_placeholder": "Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։", "upload_modal.description_placeholder": "Բել դղեակի ձախ ժամն օֆ ազգութեանը ցպահանջ չճշտած վնաս էր եւ փառք։",
"upload_modal.detect_text": "Հայտնբերել տեքստը նկարից", "upload_modal.detect_text": "Յայտնաբերել տեքստը նկարից",
"upload_modal.edit_media": "Խմբագրել մեդիան", "upload_modal.edit_media": "Խմբագրել մեդիան",
"upload_modal.hint": "Սեղմէք եւ տեղաշարժէք նախադիտման շրջանակը՝ որ ընտրէք մանրապատկերում միշտ տեսանելի կէտը։", "upload_modal.hint": "Սեղմէք եւ տեղաշարժէք նախադիտման շրջանակը՝ որ ընտրէք մանրապատկերում միշտ տեսանելի կէտը։",
"upload_modal.preparing_ocr": "Գրաճանաչման նախապատրաստում…", "upload_modal.preparing_ocr": "Գրաճանաչման նախապատրաստում…",
"upload_modal.preview_label": "Նախադիտում ({ratio})", "upload_modal.preview_label": "Նախադիտում ({ratio})",
"upload_progress.label": "Վերբեռնվում է…", "upload_progress.label": "Վերբեռնվում է…",
"video.close": "Փակել տեսագրութիւնը", "video.close": "Փակել տեսագրութիւնը",
"video.download": "Ներբեռնել ֆայլը", "video.download": "Ներբեռնել նիշքը",
"video.exit_fullscreen": "Անջատել լիաէկրան դիտումը", "video.exit_fullscreen": "Անջատել լիաէկրան դիտումը",
"video.expand": "Ընդարձակել տեսագրութիւնը", "video.expand": "Ընդարձակել տեսագրութիւնը",
"video.fullscreen": "Լիաէկրան", "video.fullscreen": "Լիաէկրան",

@ -38,7 +38,7 @@
"account.requested": "അനുവാദത്തിനായി കാത്തിരിക്കുന്നു. പിന്തുടരാനുള്ള അപേക്ഷ റദ്ദാക്കുവാൻ ഞെക്കുക", "account.requested": "അനുവാദത്തിനായി കാത്തിരിക്കുന്നു. പിന്തുടരാനുള്ള അപേക്ഷ റദ്ദാക്കുവാൻ ഞെക്കുക",
"account.share": "@{name} ന്റെ പ്രൊഫൈൽ പങ്കുവെക്കുക", "account.share": "@{name} ന്റെ പ്രൊഫൈൽ പങ്കുവെക്കുക",
"account.show_reblogs": "@{name} ൽ നിന്നുള്ള ബൂസ്റ്റുകൾ കാണിക്കുക", "account.show_reblogs": "@{name} ൽ നിന്നുള്ള ബൂസ്റ്റുകൾ കാണിക്കുക",
"account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", "account.statuses_counter": "{count, plural, one {{counter} ടൂട്ട്} other {{counter} ടൂട്ടുകൾ}}",
"account.unblock": "ബ്ലോക്ക് മാറ്റുക @{name}", "account.unblock": "ബ്ലോക്ക് മാറ്റുക @{name}",
"account.unblock_domain": "{domain} വെളിപ്പെടുത്തുക", "account.unblock_domain": "{domain} വെളിപ്പെടുത്തുക",
"account.unendorse": "പ്രൊഫൈലിൽ പ്രകടമാക്കാതിരിക്കുക", "account.unendorse": "പ്രൊഫൈലിൽ പ്രകടമാക്കാതിരിക്കുക",
@ -250,8 +250,8 @@
"keyboard_shortcuts.spoilers": "to show/hide CW field", "keyboard_shortcuts.spoilers": "to show/hide CW field",
"keyboard_shortcuts.start": "to open \"get started\" column", "keyboard_shortcuts.start": "to open \"get started\" column",
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
"keyboard_shortcuts.toggle_sensitivity": "to show/hide media", "keyboard_shortcuts.toggle_sensitivity": "മീഡിയ കാണിക്കുന്നതിനും/മറയ്ക്കുന്നതിനും",
"keyboard_shortcuts.toot": "to start a brand new toot", "keyboard_shortcuts.toot": "ഒരു പുതിയ ടൂട്ട് ആരംഭിക്കാൻ",
"keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
"keyboard_shortcuts.up": "to move up in the list", "keyboard_shortcuts.up": "to move up in the list",
"lightbox.close": "അടയ്ക്കുക", "lightbox.close": "അടയ്ക്കുക",
@ -269,7 +269,7 @@
"lists.replies_policy.followed": "Any followed user", "lists.replies_policy.followed": "Any followed user",
"lists.replies_policy.list": "Members of the list", "lists.replies_policy.list": "Members of the list",
"lists.replies_policy.none": "ആരുമില്ല", "lists.replies_policy.none": "ആരുമില്ല",
"lists.replies_policy.title": "Show replies to:", "lists.replies_policy.title": "ഇതിനുള്ള മറുപടികൾ കാണിക്കുക:",
"lists.search": "Search among people you follow", "lists.search": "Search among people you follow",
"lists.subheading": "എന്റെ പട്ടികകൾ", "lists.subheading": "എന്റെ പട്ടികകൾ",
"load_pending": "{count, plural, one {# new item} other {# new items}}", "load_pending": "{count, plural, one {# new item} other {# new items}}",
@ -305,14 +305,14 @@
"navigation_bar.security": "സുരക്ഷ", "navigation_bar.security": "സുരക്ഷ",
"notification.favourite": "{name} favourited your status", "notification.favourite": "{name} favourited your status",
"notification.follow": "{name} നിങ്ങളെ പിന്തുടർന്നു", "notification.follow": "{name} നിങ്ങളെ പിന്തുടർന്നു",
"notification.follow_request": "{name} has requested to follow you", "notification.follow_request": "{name} നിങ്ങളെ പിന്തുടരാൻ അഭ്യർത്ഥിച്ചു",
"notification.mention": "{name} mentioned you", "notification.mention": "{name} mentioned you",
"notification.own_poll": "നിങ്ങളുടെ പോൾ അവസാനിച്ചു", "notification.own_poll": "നിങ്ങളുടെ പോൾ അവസാനിച്ചു",
"notification.poll": "A poll you have voted in has ended", "notification.poll": "A poll you have voted in has ended",
"notification.reblog": "{name} നിങ്ങളുടെ പോസ്റ്റ് ബൂസ്റ്റ് ചെയ്തു", "notification.reblog": "{name} നിങ്ങളുടെ പോസ്റ്റ് ബൂസ്റ്റ് ചെയ്തു",
"notification.status": "{name} ഇപ്പോൾ പോസ്റ്റുചെയ്‌തു", "notification.status": "{name} ഇപ്പോൾ പോസ്റ്റുചെയ്‌തു",
"notifications.clear": "അറിയിപ്പ് മായ്ക്കുക", "notifications.clear": "അറിയിപ്പ് മായ്ക്കുക",
"notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", "notifications.clear_confirmation": "നിങ്ങളുടെ എല്ലാ അറിയിപ്പുകളും ശാശ്വതമായി മായ്‌ക്കണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?",
"notifications.column_settings.alert": "ഡെസ്ക്ടോപ്പ് അറിയിപ്പുകൾ", "notifications.column_settings.alert": "ഡെസ്ക്ടോപ്പ് അറിയിപ്പുകൾ",
"notifications.column_settings.favourite": "പ്രിയപ്പെട്ടവ:", "notifications.column_settings.favourite": "പ്രിയപ്പെട്ടവ:",
"notifications.column_settings.filter_bar.advanced": "എല്ലാ വിഭാഗങ്ങളും പ്രദർശിപ്പിക്കുക", "notifications.column_settings.filter_bar.advanced": "എല്ലാ വിഭാഗങ്ങളും പ്രദർശിപ്പിക്കുക",
@ -349,14 +349,14 @@
"poll.total_people": "{count, plural, one {# person} other {# people}}", "poll.total_people": "{count, plural, one {# person} other {# people}}",
"poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
"poll.vote": "വോട്ട് ചെയ്യുക", "poll.vote": "വോട്ട് ചെയ്യുക",
"poll.voted": "You voted for this answer", "poll.voted": "ഈ ഉത്തരത്തിനായി നിങ്ങൾ വോട്ട് ചെയ്തു",
"poll_button.add_poll": "ഒരു പോൾ ചേർക്കുക", "poll_button.add_poll": "ഒരു പോൾ ചേർക്കുക",
"poll_button.remove_poll": "പോൾ നീക്കംചെയ്യുക", "poll_button.remove_poll": "പോൾ നീക്കംചെയ്യുക",
"privacy.change": "Adjust status privacy", "privacy.change": "ടൂട്ട് സ്വകാര്യത ക്രമീകരിക്കുക",
"privacy.direct.long": "Post to mentioned users only", "privacy.direct.long": "Post to mentioned users only",
"privacy.direct.short": "നേരിട്ട്", "privacy.direct.short": "നേരിട്ട്",
"privacy.private.long": "Post to followers only", "privacy.private.long": "Post to followers only",
"privacy.private.short": "Followers-only", "privacy.private.short": "പിന്തുടരുന്നവർക്ക് മാത്രം",
"privacy.public.long": "Post to public timelines", "privacy.public.long": "Post to public timelines",
"privacy.public.short": "Public", "privacy.public.short": "Public",
"privacy.unlisted.long": "Do not show in public timelines", "privacy.unlisted.long": "Do not show in public timelines",
@ -372,7 +372,7 @@
"relative_time.today": "ഇന്ന്", "relative_time.today": "ഇന്ന്",
"reply_indicator.cancel": "റദ്ദാക്കുക", "reply_indicator.cancel": "റദ്ദാക്കുക",
"report.forward": "Forward to {target}", "report.forward": "Forward to {target}",
"report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", "report.forward_hint": "ഈ അക്കൗണ്ട് മറ്റൊരു സെർവറിൽ നിന്നാണ്. റിപ്പോർട്ടിന്റെ അജ്ഞാത പകർപ്പ് അവിടെ അയയ്ക്കണോ?",
"report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:", "report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:",
"report.placeholder": "കൂടുതൽ അഭിപ്രായങ്ങൾ", "report.placeholder": "കൂടുതൽ അഭിപ്രായങ്ങൾ",
"report.submit": "സമർപ്പിക്കുക", "report.submit": "സമർപ്പിക്കുക",
@ -420,14 +420,14 @@
"status.remove_bookmark": "ബുക്ക്മാർക്ക് നീക്കംചെയ്യുക", "status.remove_bookmark": "ബുക്ക്മാർക്ക് നീക്കംചെയ്യുക",
"status.reply": "മറുപടി", "status.reply": "മറുപടി",
"status.replyAll": "Reply to thread", "status.replyAll": "Reply to thread",
"status.report": "Report @{name}", "status.report": "@{name}--നെ റിപ്പോർട്ട് ചെയ്യുക",
"status.sensitive_warning": "Sensitive content", "status.sensitive_warning": "Sensitive content",
"status.share": "പങ്കിടുക", "status.share": "പങ്കിടുക",
"status.show_less": "കുറച്ച് കാണിക്കുക", "status.show_less": "കുറച്ച് കാണിക്കുക",
"status.show_less_all": "Show less for all", "status.show_less_all": "Show less for all",
"status.show_more": "കൂടുതകൽ കാണിക്കുക", "status.show_more": "കൂടുതകൽ കാണിക്കുക",
"status.show_more_all": "എല്ലാവർക്കുമായി കൂടുതൽ കാണിക്കുക", "status.show_more_all": "എല്ലാവർക്കുമായി കൂടുതൽ കാണിക്കുക",
"status.show_thread": "Show thread", "status.show_thread": "ത്രെഡ് കാണിക്കുക",
"status.uncached_media_warning": "ലഭ്യമല്ല", "status.uncached_media_warning": "ലഭ്യമല്ല",
"status.unmute_conversation": "Unmute conversation", "status.unmute_conversation": "Unmute conversation",
"status.unpin": "Unpin from profile", "status.unpin": "Unpin from profile",
@ -463,24 +463,24 @@
"upload_form.thumbnail": "ലഘുചിത്രം മാറ്റുക", "upload_form.thumbnail": "ലഘുചിത്രം മാറ്റുക",
"upload_form.undo": "ഇല്ലാതാക്കുക", "upload_form.undo": "ഇല്ലാതാക്കുക",
"upload_form.video_description": "Describe for people with hearing loss or visual impairment", "upload_form.video_description": "Describe for people with hearing loss or visual impairment",
"upload_modal.analyzing_picture": "Analyzing picture…", "upload_modal.analyzing_picture": "ചിത്രം വിശകലനം ചെയ്യുന്നു…",
"upload_modal.apply": "പ്രയോഗിക്കുക", "upload_modal.apply": "പ്രയോഗിക്കുക",
"upload_modal.choose_image": "ചിത്രം തിരഞ്ഞെടുക്കുക", "upload_modal.choose_image": "ചിത്രം തിരഞ്ഞെടുക്കുക",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture", "upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "മീഡിയ തിരുത്തുക", "upload_modal.edit_media": "മീഡിയ തിരുത്തുക",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preparing_ocr": "OCR തയ്യാറാക്കുന്നു…",
"upload_modal.preview_label": "Preview ({ratio})", "upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "Uploading…", "upload_progress.label": "Uploading…",
"video.close": "വീഡിയോ അടയ്ക്കുക", "video.close": "വീഡിയോ അടയ്ക്കുക",
"video.download": "ഫയൽ ഡൌൺലോഡ് ചെയ്യുക", "video.download": "ഫയൽ ഡൌൺലോഡ് ചെയ്യുക",
"video.exit_fullscreen": "Exit full screen", "video.exit_fullscreen": "പൂർണ്ണ സ്ക്രീനിൽ നിന്ന് പുറത്തുകടക്കുക",
"video.expand": "Expand video", "video.expand": "Expand video",
"video.fullscreen": "പൂർണ്ണ സ്ക്രീൻ", "video.fullscreen": "പൂർണ്ണ സ്ക്രീൻ",
"video.hide": "വീഡിയോ മറയ്ക്കുക", "video.hide": "വീഡിയോ മറയ്ക്കുക",
"video.mute": "Mute sound", "video.mute": "Mute sound",
"video.pause": "Pause", "video.pause": "Pause",
"video.play": "Play", "video.play": "പ്ലേ",
"video.unmute": "Unmute sound" "video.unmute": "Unmute sound"
} }

@ -1,5 +1,5 @@
{ {
"account.account_note_header": "Viết nhận xét", "account.account_note_header": "Ghi chú",
"account.add_or_remove_from_list": "Thêm hoặc Xóa khỏi danh sách", "account.add_or_remove_from_list": "Thêm hoặc Xóa khỏi danh sách",
"account.badges.bot": "Bot", "account.badges.bot": "Bot",
"account.badges.group": "Nhóm", "account.badges.group": "Nhóm",
@ -425,10 +425,10 @@
"status.share": "Chia sẻ", "status.share": "Chia sẻ",
"status.show_less": "Thu gọn", "status.show_less": "Thu gọn",
"status.show_less_all": "Thu gọn toàn bộ", "status.show_less_all": "Thu gọn toàn bộ",
"status.show_more": "Mở rộng", "status.show_more": "Xem thêm",
"status.show_more_all": "Hiển thị tất cả", "status.show_more_all": "Hiển thị tất cả",
"status.show_thread": "Liên quan", "status.show_thread": "Toàn bộ chủ đề",
"status.uncached_media_warning": "Giới hạn", "status.uncached_media_warning": "Uncached",
"status.unmute_conversation": "Quan tâm", "status.unmute_conversation": "Quan tâm",
"status.unpin": "Bỏ ghim trên trang cá nhân", "status.unpin": "Bỏ ghim trên trang cá nhân",
"suggestions.dismiss": "Tắt đề xuất", "suggestions.dismiss": "Tắt đề xuất",

@ -154,6 +154,11 @@
display: block; display: block;
width: 100%; width: 100%;
} }
.layout-multiple-columns &.button--with-bell {
font-size: 12px;
padding: 0 8px;
}
} }
.column__wrapper { .column__wrapper {
@ -2879,6 +2884,7 @@ a.account__display-name {
flex: 0 0 auto; flex: 0 0 auto;
padding: 10px; padding: 10px;
padding-top: 20px; padding-top: 20px;
z-index: 1;
ul { ul {
margin-bottom: 10px; margin-bottom: 10px;
@ -7194,21 +7200,6 @@ noscript {
.audio-player { .audio-player {
border-radius: 0; border-radius: 0;
} }
@media screen and (max-width: 415px) {
width: 210px;
bottom: 10px;
right: 10px;
&__footer {
display: none;
}
.video-player,
.audio-player {
border-radius: 0 0 4px 4px;
}
}
} }
.picture-in-picture-placeholder { .picture-in-picture-placeholder {

@ -444,6 +444,10 @@
} }
} }
.logo-button {
padding: 3px 15px;
}
&__image { &__image {
border-radius: 4px 4px 0 0; border-radius: 4px 4px 0 0;
overflow: hidden; overflow: hidden;

@ -170,6 +170,11 @@ body.rtl {
right: 42px; right: 42px;
} }
.account__header__tabs__buttons > .icon-button {
margin-right: 0;
margin-left: 8px;
}
.account__avatar-overlay-overlay { .account__avatar-overlay-overlay {
right: auto; right: auto;
left: 0; left: 0;

@ -83,9 +83,14 @@
background: $ui-highlight-color; background: $ui-highlight-color;
color: $primary-text-color; color: $primary-text-color;
text-transform: none; text-transform: none;
line-height: 36px; line-height: 1.2;
height: auto; height: auto;
padding: 3px 15px; min-height: 36px;
min-width: 88px;
white-space: normal;
overflow-wrap: break-word;
hyphens: auto;
padding: 0 15px;
border: 0; border: 0;
svg { svg {
@ -126,6 +131,12 @@
} }
} }
a.button.logo-button {
display: inline-flex;
align-items: center;
justify-content: center;
}
.embed, .embed,
.public-layout { .public-layout {
.status__content[data-spoiler=folded] { .status__content[data-spoiler=folded] {

@ -97,8 +97,8 @@ module AccountInteractions
has_many :announcement_mutes, dependent: :destroy has_many :announcement_mutes, dependent: :destroy
end end
def follow!(other_account, reblogs: nil, notify: nil, uri: nil, rate_limit: false) def follow!(other_account, reblogs: nil, notify: nil, uri: nil, rate_limit: false, bypass_limit: false)
rel = active_relationships.create_with(show_reblogs: reblogs.nil? ? true : reblogs, notify: notify.nil? ? false : notify, uri: uri, rate_limit: rate_limit) rel = active_relationships.create_with(show_reblogs: reblogs.nil? ? true : reblogs, notify: notify.nil? ? false : notify, uri: uri, rate_limit: rate_limit, bypass_follow_limit: bypass_limit)
.find_or_create_by!(target_account: other_account) .find_or_create_by!(target_account: other_account)
rel.show_reblogs = reblogs unless reblogs.nil? rel.show_reblogs = reblogs unless reblogs.nil?
@ -111,8 +111,8 @@ module AccountInteractions
rel rel
end end
def request_follow!(other_account, reblogs: nil, notify: nil, uri: nil, rate_limit: false) def request_follow!(other_account, reblogs: nil, notify: nil, uri: nil, rate_limit: false, bypass_limit: false)
rel = follow_requests.create_with(show_reblogs: reblogs.nil? ? true : reblogs, notify: notify.nil? ? false : notify, uri: uri, rate_limit: rate_limit) rel = follow_requests.create_with(show_reblogs: reblogs.nil? ? true : reblogs, notify: notify.nil? ? false : notify, uri: uri, rate_limit: rate_limit, bypass_follow_limit: bypass_limit)
.find_or_create_by!(target_account: other_account) .find_or_create_by!(target_account: other_account)
rel.show_reblogs = reblogs unless reblogs.nil? rel.show_reblogs = reblogs unless reblogs.nil?

@ -0,0 +1,17 @@
# frozen_string_literal: true
module FollowLimitable
extend ActiveSupport::Concern
included do
validates_with FollowLimitValidator, on: :create, unless: :bypass_follow_limit?
end
def bypass_follow_limit=(value)
@bypass_follow_limit = value
end
def bypass_follow_limit?
@bypass_follow_limit
end
end

@ -17,6 +17,7 @@ class Follow < ApplicationRecord
include Paginable include Paginable
include RelationshipCacheable include RelationshipCacheable
include RateLimitable include RateLimitable
include FollowLimitable
rate_limit by: :account, family: :follows rate_limit by: :account, family: :follows
@ -26,7 +27,6 @@ class Follow < ApplicationRecord
has_one :notification, as: :activity, dependent: :destroy has_one :notification, as: :activity, dependent: :destroy
validates :account_id, uniqueness: { scope: :target_account_id } validates :account_id, uniqueness: { scope: :target_account_id }
validates_with FollowLimitValidator, on: :create, if: :rate_limit?
scope :recent, -> { reorder(id: :desc) } scope :recent, -> { reorder(id: :desc) }

@ -17,6 +17,7 @@ class FollowRequest < ApplicationRecord
include Paginable include Paginable
include RelationshipCacheable include RelationshipCacheable
include RateLimitable include RateLimitable
include FollowLimitable
rate_limit by: :account, family: :follows rate_limit by: :account, family: :follows
@ -26,7 +27,6 @@ class FollowRequest < ApplicationRecord
has_one :notification, as: :activity, dependent: :destroy has_one :notification, as: :activity, dependent: :destroy
validates :account_id, uniqueness: { scope: :target_account_id } validates :account_id, uniqueness: { scope: :target_account_id }
validates_with FollowLimitValidator, on: :create, if: :rate_limit?
def authorize! def authorize!
account.follow!(target_account, reblogs: show_reblogs, notify: notify, uri: uri) account.follow!(target_account, reblogs: show_reblogs, notify: notify, uri: uri)

@ -1,15 +0,0 @@
# frozen_string_literal: true
class REST::AccountFeaturedTagSerializer < ActiveModel::Serializer
include RoutingHelper
attributes :id, :name, :url
def id
object.tag.id.to_s
end
def url
short_account_tag_url(object.account, object.tag)
end
end

@ -1,9 +1,15 @@
# frozen_string_literal: true # frozen_string_literal: true
class REST::FeaturedTagSerializer < ActiveModel::Serializer class REST::FeaturedTagSerializer < ActiveModel::Serializer
attributes :id, :name, :statuses_count, :last_status_at include RoutingHelper
attributes :id, :name, :url, :statuses_count, :last_status_at
def id def id
object.id.to_s object.id.to_s
end end
def url
short_account_tag_url(object.account, object.tag)
end
end end

@ -32,7 +32,7 @@ class BatchedRemoveStatusService < BaseService
# Since we skipped all callbacks, we also need to manually # Since we skipped all callbacks, we also need to manually
# deindex the statuses # deindex the statuses
Chewy.strategy.current.update(StatusesIndex, statuses_and_reblogs) if Chewy.enabled? Chewy.strategy.current.update(StatusesIndex::Status, statuses_and_reblogs) if Chewy.enabled?
return if options[:skip_side_effects] return if options[:skip_side_effects]

@ -142,6 +142,7 @@ class DeleteAccountService < BaseService
purge_user! purge_user!
purge_profile! purge_profile!
purge_statuses! purge_statuses!
purge_mentions!
purge_media_attachments! purge_media_attachments!
purge_polls! purge_polls!
purge_generated_notifications! purge_generated_notifications!
@ -159,6 +160,10 @@ class DeleteAccountService < BaseService
end end
end end
def purge_mentions!
@account.mentions.reorder(nil).where.not(status_id: reported_status_ids).in_batches.delete_all
end
def purge_media_attachments! def purge_media_attachments!
@account.media_attachments.reorder(nil).find_each do |media_attachment| @account.media_attachments.reorder(nil).find_each do |media_attachment|
next if keep_account_record? && reported_status_ids.include?(media_attachment.status_id) next if keep_account_record? && reported_status_ids.include?(media_attachment.status_id)
@ -182,7 +187,7 @@ class DeleteAccountService < BaseService
@account.favourites.in_batches do |favourites| @account.favourites.in_batches do |favourites|
ids = favourites.pluck(:status_id) ids = favourites.pluck(:status_id)
StatusStat.where(status_id: ids).update_all('favourites_count = GREATEST(0, favourites_count - 1)') StatusStat.where(status_id: ids).update_all('favourites_count = GREATEST(0, favourites_count - 1)')
Chewy.strategy.current.update(StatusesIndex, ids) if Chewy.enabled? Chewy.strategy.current.update(StatusesIndex::Status, ids) if Chewy.enabled?
# Rails.cache.delete_multi would be better, but we don't have it yet # Rails.cache.delete_multi would be better, but we don't have it yet
ids.each { |id| Rails.cache.delete("statuses/#{id}") } ids.each { |id| Rails.cache.delete("statuses/#{id}") }
favourites.delete_all favourites.delete_all
@ -191,7 +196,7 @@ class DeleteAccountService < BaseService
def purge_bookmarks! def purge_bookmarks!
@account.bookmarks.in_batches do |bookmarks| @account.bookmarks.in_batches do |bookmarks|
Chewy.strategy.current.update(StatusesIndex, bookmarks.pluck(:status_id)) if Chewy.enabled? Chewy.strategy.current.update(StatusesIndex::Status, bookmarks.pluck(:status_id)) if Chewy.enabled?
bookmarks.delete_all bookmarks.delete_all
end end
end end

@ -11,11 +11,12 @@ class FollowService < BaseService
# @option [Boolean] :reblogs Whether or not to show reblogs, defaults to true # @option [Boolean] :reblogs Whether or not to show reblogs, defaults to true
# @option [Boolean] :notify Whether to create notifications about new posts, defaults to false # @option [Boolean] :notify Whether to create notifications about new posts, defaults to false
# @option [Boolean] :bypass_locked # @option [Boolean] :bypass_locked
# @option [Boolean] :bypass_limit Allow following past the total follow number
# @option [Boolean] :with_rate_limit # @option [Boolean] :with_rate_limit
def call(source_account, target_account, options = {}) def call(source_account, target_account, options = {})
@source_account = source_account @source_account = source_account
@target_account = ResolveAccountService.new.call(target_account, skip_webfinger: true) @target_account = ResolveAccountService.new.call(target_account, skip_webfinger: true)
@options = { bypass_locked: false, with_rate_limit: false }.merge(options) @options = { bypass_locked: false, bypass_limit: false, with_rate_limit: false }.merge(options)
raise ActiveRecord::RecordNotFound if following_not_possible? raise ActiveRecord::RecordNotFound if following_not_possible?
raise Mastodon::NotPermittedError if following_not_allowed? raise Mastodon::NotPermittedError if following_not_allowed?
@ -54,7 +55,7 @@ class FollowService < BaseService
end end
def request_follow! def request_follow!
follow_request = @source_account.request_follow!(@target_account, reblogs: @options[:reblogs], notify: @options[:notify], rate_limit: @options[:with_rate_limit]) follow_request = @source_account.request_follow!(@target_account, reblogs: @options[:reblogs], notify: @options[:notify], rate_limit: @options[:with_rate_limit], bypass_limit: @options[:bypass_limit])
if @target_account.local? if @target_account.local?
LocalNotificationWorker.perform_async(@target_account.id, follow_request.id, follow_request.class.name, :follow_request) LocalNotificationWorker.perform_async(@target_account.id, follow_request.id, follow_request.class.name, :follow_request)
@ -66,7 +67,7 @@ class FollowService < BaseService
end end
def direct_follow! def direct_follow!
follow = @source_account.follow!(@target_account, reblogs: @options[:reblogs], notify: @options[:notify], rate_limit: @options[:with_rate_limit]) follow = @source_account.follow!(@target_account, reblogs: @options[:reblogs], notify: @options[:notify], rate_limit: @options[:with_rate_limit], bypass_limit: @options[:bypass_limit])
LocalNotificationWorker.perform_async(@target_account.id, follow.id, follow.class.name, :follow) LocalNotificationWorker.perform_async(@target_account.id, follow.id, follow.class.name, :follow)
MergeWorker.perform_async(@target_account.id, @source_account.id) MergeWorker.perform_async(@target_account.id, @source_account.id)

@ -65,10 +65,16 @@ class SuspendAccountService < BaseService
attachment = media_attachment.public_send(attachment_name) attachment = media_attachment.public_send(attachment_name)
styles = [:original] | attachment.styles.keys styles = [:original] | attachment.styles.keys
next if attachment.blank?
styles.each do |style| styles.each do |style|
case Paperclip::Attachment.default_options[:storage] case Paperclip::Attachment.default_options[:storage]
when :s3 when :s3
attachment.s3_object(style).acl.put(acl: 'private') begin
attachment.s3_object(style).acl.put(acl: 'private')
rescue Aws::S3::Errors::NoSuchKey
Rails.logger.warn "Tried to change acl on non-existent key #{attachment.s3_object(style).key}"
end
when :fog when :fog
# Not supported # Not supported
when :filesystem when :filesystem

@ -56,10 +56,16 @@ class UnsuspendAccountService < BaseService
attachment = media_attachment.public_send(attachment_name) attachment = media_attachment.public_send(attachment_name)
styles = [:original] | attachment.styles.keys styles = [:original] | attachment.styles.keys
next if attachment.blank?
styles.each do |style| styles.each do |style|
case Paperclip::Attachment.default_options[:storage] case Paperclip::Attachment.default_options[:storage]
when :s3 when :s3
attachment.s3_object(style).acl.put(acl: Paperclip::Attachment.default_options[:s3_permissions]) begin
attachment.s3_object(style).acl.put(acl: Paperclip::Attachment.default_options[:s3_permissions])
rescue Aws::S3::Errors::NoSuchKey
Rails.logger.warn "Tried to change acl on non-existent key #{attachment.s3_object(style).key}"
end
when :fog when :fog
# Not supported # Not supported
when :filesystem when :filesystem

@ -14,7 +14,7 @@
- unless status.proper.media_attachments.empty? - unless status.proper.media_attachments.empty?
- if status.proper.media_attachments.first.video? - if status.proper.media_attachments.first.video?
- video = status.proper.media_attachments.first - video = status.proper.media_attachments.first
= react_component :video, src: video.file.url(:original), preview: video.file.url(:small), blurhash: video.blurhash, sensitive: status.proper.sensitive?, visible: false, width: 610, height: 343, inline: true, alt: video.description = react_component :video, src: video.file.url(:original), preview: video.file.url(:small), frameRate: video.file.meta.dig('original', 'frame_rate'), blurhash: video.blurhash, sensitive: status.proper.sensitive?, visible: false, width: 610, height: 343, inline: true, alt: video.description, media: [ActiveModelSerializers::SerializableResource.new(video, serializer: REST::MediaAttachmentSerializer)].as_json
- elsif status.proper.media_attachments.first.audio? - elsif status.proper.media_attachments.first.audio?
- audio = status.proper.media_attachments.first - audio = status.proper.media_attachments.first
= react_component :audio, src: audio.file.url(:original), height: 110, alt: audio.description, duration: audio.file.meta.dig(:original, :duration) = react_component :audio, src: audio.file.url(:original), height: 110, alt: audio.description, duration: audio.file.meta.dig(:original, :duration)

@ -10,7 +10,7 @@
= render partial: 'layouts/theme', object: @theme = render partial: 'layouts/theme', object: @theme
- if @media_attachment.video? - if @media_attachment.video?
= react_component :video, src: @media_attachment.file.url(:original), preview: @media_attachment.thumbnail.present? ? @media_attachment.thumbnail.url : @media_attachment.file.url(:small), blurhash: @media_attachment.blurhash, width: 670, height: 380, editable: true, detailed: true, inline: true, alt: @media_attachment.description do = react_component :video, src: @media_attachment.file.url(:original), preview: @media_attachment.thumbnail.present? ? @media_attachment.thumbnail.url : @media_attachment.file.url(:small), frameRate: @media_attachment.file.meta.dig('original', 'frame_rate'), blurhash: @media_attachment.blurhash, width: 670, height: 380, editable: true, detailed: true, inline: true, alt: @media_attachment.description, media: [ActiveModelSerializers::SerializableResource.new(@media_attachment, serializer: REST::MediaAttachmentSerializer)].as_json do
%video{ controls: 'controls' } %video{ controls: 'controls' }
%source{ src: @media_attachment.file.url(:original) } %source{ src: @media_attachment.file.url(:original) }
- elsif @media_attachment.gifv? - elsif @media_attachment.gifv?

@ -29,7 +29,7 @@
- if !status.media_attachments.empty? - if !status.media_attachments.empty?
- if status.media_attachments.first.video? - if status.media_attachments.first.video?
- video = status.media_attachments.first - video = status.media_attachments.first
= react_component :video, src: full_asset_url(video.file.url(:original)), preview: full_asset_url(video.thumbnail.present? ? video.thumbnail.url : video.file.url(:small)), blurhash: video.blurhash, sensitive: sensitized?(status, current_account), width: 670, height: 380, detailed: true, inline: true, alt: video.description do = react_component :video, src: full_asset_url(video.file.url(:original)), preview: full_asset_url(video.thumbnail.present? ? video.thumbnail.url : video.file.url(:small)), frameRate: video.file.meta.dig('original', 'frame_rate'), blurhash: video.blurhash, sensitive: sensitized?(status, current_account), width: 670, height: 380, detailed: true, inline: true, alt: video.description, media: [ActiveModelSerializers::SerializableResource.new(video, serializer: REST::MediaAttachmentSerializer)].as_json do
= render partial: 'statuses/attachment_list', locals: { attachments: status.media_attachments } = render partial: 'statuses/attachment_list', locals: { attachments: status.media_attachments }
- elsif status.media_attachments.first.audio? - elsif status.media_attachments.first.audio?
- audio = status.media_attachments.first - audio = status.media_attachments.first

@ -38,7 +38,7 @@
- if !status.media_attachments.empty? - if !status.media_attachments.empty?
- if status.media_attachments.first.video? - if status.media_attachments.first.video?
- video = status.media_attachments.first - video = status.media_attachments.first
= react_component :video, src: full_asset_url(video.file.url(:original)), preview: full_asset_url(video.thumbnail.present? ? video.thumbnail.url : video.file.url(:small)), blurhash: video.blurhash, sensitive: sensitized?(status, current_account), width: 610, height: 343, inline: true, alt: video.description do = react_component :video, src: full_asset_url(video.file.url(:original)), preview: full_asset_url(video.thumbnail.present? ? video.thumbnail.url : video.file.url(:small)), frameRate: video.file.meta.dig('original', 'frame_rate'), blurhash: video.blurhash, sensitive: sensitized?(status, current_account), width: 610, height: 343, inline: true, alt: video.description, media: [ActiveModelSerializers::SerializableResource.new(video, serializer: REST::MediaAttachmentSerializer)].as_json do
= render partial: 'statuses/attachment_list', locals: { attachments: status.media_attachments } = render partial: 'statuses/attachment_list', locals: { attachments: status.media_attachments }
- elsif status.media_attachments.first.audio? - elsif status.media_attachments.first.audio?
- audio = status.media_attachments.first - audio = status.media_attachments.first

@ -7,7 +7,7 @@ class AuthorizeFollowWorker
source_account = Account.find(source_account_id) source_account = Account.find(source_account_id)
target_account = Account.find(target_account_id) target_account = Account.find(target_account_id)
AuthorizeFollowService.new.call(source_account, target_account) AuthorizeFollowService.new.call(source_account, target_account, bypass_limit: true)
rescue ActiveRecord::RecordNotFound rescue ActiveRecord::RecordNotFound
true true
end end

@ -15,7 +15,11 @@ class Import::RelationshipWorker
case relationship case relationship
when 'follow' when 'follow'
FollowService.new.call(from_account, target_account, options) begin
FollowService.new.call(from_account, target_account, options)
rescue ActiveRecord::RecordInvalid
raise if FollowLimitValidator.limit_for_account(from_account) < from_account.following_count
end
when 'unfollow' when 'unfollow'
UnfollowService.new.call(from_account, target_account) UnfollowService.new.call(from_account, target_account)
when 'block' when 'block'

@ -19,7 +19,7 @@ class RefollowWorker
# Schedule re-follow # Schedule re-follow
begin begin
FollowService.new.call(follower, target_account, reblogs: reblogs, notify: notify) FollowService.new.call(follower, target_account, reblogs: reblogs, notify: notify, bypass_limit: true)
rescue Mastodon::NotPermittedError, ActiveRecord::RecordNotFound, Mastodon::UnexpectedResponseError, HTTP::Error, OpenSSL::SSL::SSLError rescue Mastodon::NotPermittedError, ActiveRecord::RecordNotFound, Mastodon::UnexpectedResponseError, HTTP::Error, OpenSSL::SSL::SSLError
next next
end end

@ -14,7 +14,7 @@ class UnfollowFollowWorker
reblogs = follow&.show_reblogs? reblogs = follow&.show_reblogs?
notify = follow&.notify? notify = follow&.notify?
FollowService.new.call(follower_account, new_target_account, reblogs: reblogs, notify: notify, bypass_locked: bypass_locked) FollowService.new.call(follower_account, new_target_account, reblogs: reblogs, notify: notify, bypass_locked: bypass_locked, bypass_limit: true)
UnfollowService.new.call(follower_account, old_target_account, skip_unmerge: true) UnfollowService.new.call(follower_account, old_target_account, skip_unmerge: true)
rescue ActiveRecord::RecordNotFound, Mastodon::NotPermittedError rescue ActiveRecord::RecordNotFound, Mastodon::NotPermittedError
true true

@ -60,6 +60,23 @@ hy:
title: 2FA վերականգնման կոդերը փոփոխուել են title: 2FA վերականգնման կոդերը փոփոխուել են
unlock_instructions: unlock_instructions:
subject: Մաստոդոն․ Ապակողպելու նկարագրութիւնները subject: Մաստոդոն․ Ապակողպելու նկարագրութիւնները
webauthn_credential:
added:
explanation: Հետեւեալ անվտանգութեան բանալին է աւելացուել հաշուիդ
subject: Մաստոդոն․ Նոր անվտանգութեան բանալի
title: Նոր անվտանգութեան բանալի է աւելացուել
deleted:
explanation: Հետեւեալ անվտանգութեան բանալին քո հաշուից ջնջուել է
subject: Մաստոդոն․ Անվտանգութեան բանալին ջնջուել է
title: Անվտանգութեան բանալիներիցդ մեկը ջնջուել է
webauthn_disabled:
explanation: Անվտանգութեան բանալիներով նոյնականացումը քո հաշուից կասեցուել է։ Մուտք գործելն այժմ հնարաւոր է՝ օգտագործելով միայն զուգաւորուած TOTP յաւելուածից գեներացուած կտրօնը։
subject: Մաստոդոն․ Նոյնականացումն անվտանգութեան բանալիներով կասեցուած է
title: Անվտանգութեան բանալիները կասեցուել են
webauthn_enabled:
explanation: Անվտանգութեան բանալիով նոյնականացումը քո հաշուի համար միացուած է։ Քո անվտանգութեան բանալին այժմ կարող է օգտագործուել մուտք գործելու համար։
subject: Մաստոդոն․ Անվտանգութեան բանալիով նոյնականացումը միացուած է
title: Անվտանգութեան բանալիները միացուել են
omniauth_callbacks: omniauth_callbacks:
failure: Նոյնականացնել հնարաւոր չեղաւ %{kind}ից քանի որ %{reason}։ failure: Նոյնականացնել հնարաւոր չեղաւ %{kind}ից քանի որ %{reason}։
success: Յաջողութեամբ նոյնականացուեց %{kind} հաշուից։ success: Յաջողութեամբ նոյնականացուեց %{kind} հաշուից։

@ -45,6 +45,7 @@ hy:
silenced_title: Լռեցուած սպասարկիչներ silenced_title: Լռեցուած սպասարկիչներ
suspended: Ոչ մի տուեալ այս սպասարկիչներից չի գործարկուում, պահուում կամ փոխանակուում, կատարել որեւէ գործողութիւն կամ հաղորդակցութիւն այս սպասարկիչի օգտատէրերի հետ անհնար է․ suspended: Ոչ մի տուեալ այս սպասարկիչներից չի գործարկուում, պահուում կամ փոխանակուում, կատարել որեւէ գործողութիւն կամ հաղորդակցութիւն այս սպասարկիչի օգտատէրերի հետ անհնար է․
suspended_title: Կասեցուած սպասարկիչներ suspended_title: Կասեցուած սպասարկիչներ
unavailable_content_html: Մաստոդոնն ընդհանրապէս թոյլատրում է տեսնել բովանդակութիւնը եւ շփուել այլ դաշնեզերքի այլ հանգոյցների հետ։ Սրանք բացառութիւններն են, որոնք կիրառուել են հէնց այս հանգոյցի համար։
user_count_after: user_count_after:
one: օգտատեր one: օգտատեր
other: օգտատերեր other: օգտատերեր
@ -52,11 +53,14 @@ hy:
what_is_mastodon: Ի՞նչ է Մաստոդոնը what_is_mastodon: Ի՞նչ է Մաստոդոնը
accounts: accounts:
choices_html: "%{name}-ի ընտրանի՝" choices_html: "%{name}-ի ընտրանի՝"
endorsements_hint: Վէբ ինտերֆէյսից կարող ես ցուցադրել մարդկանց, որոնց հետեւում ես, եւ նրանք կը ցուցադրուեն այստեղ։
featured_tags_hint: Դու կարող ես ցուցադրել յատուկ պիտակներ, որոնք կը ցուցադրուեն այստեղ։
follow: Հետևել follow: Հետևել
followers: followers:
one: Հետևորդ one: Հետևորդ
other: Հետևորդներ other: Հետևորդներ
following: Հետևում եք following: Հետևում եք
instance_actor_flash: Այս հաշիւը վիրտուալ դերասան է, որը ներկայացնում է հանգոյցը, եւ ոչ որեւէ անհատ օգտատիրոջ։ Այն օգտագործուում է ֆեդերացիայի նպատակներով եւ չպէտք է կասեցուի։
joined: Միացել են %{date} joined: Միացել են %{date}
last_active: վերջին թութը last_active: վերջին թութը
link_verified_on: Սոյն յղման տիրապետումը ստուգուած է՝ %{date}֊ին link_verified_on: Սոյն յղման տիրապետումը ստուգուած է՝ %{date}֊ին
@ -67,6 +71,8 @@ hy:
nothing_here: Այստեղ բան չկայ nothing_here: Այստեղ բան չկայ
people_followed_by: Մարդիկ, որոնց %{name}ը հետեւում է people_followed_by: Մարդիկ, որոնց %{name}ը հետեւում է
people_who_follow: Մարդիկ, որոնք հետեւում են %{name}ին people_who_follow: Մարդիկ, որոնք հետեւում են %{name}ին
pin_errors:
following: Դու պէտք է հետեւես մարդուն, որին ցանկանում ես խրախուսել
posts: posts:
one: Թութ one: Թութ
other: Թութերից other: Թութերից
@ -83,6 +89,7 @@ hy:
admin: admin:
account_actions: account_actions:
action: Կատարել գործողութիւն action: Կատարել գործողութիւն
title: Իրականացնել մոդերատորական գործողութիւններ %{acct}-ի վրայ
account_moderation_notes: account_moderation_notes:
create: Թողնել նշում create: Թողնել նշում
created_msg: Մոդերացիոն նոթը բարեյաջող ստեղծուեց created_msg: Մոդերացիոն նոթը բարեյաջող ստեղծուեց
@ -92,6 +99,7 @@ hy:
add_email_domain_block: Արգելափակել էլ․ փոստի տիրոյթը add_email_domain_block: Արգելափակել էլ․ փոստի տիրոյթը
approve: Ընդունել approve: Ընդունել
approve_all: Ընդունել բոլորը approve_all: Ընդունել բոլորը
approved_msg: Յաջողութեամբ հաստատուեց %{username}֊ի գրանցման յայտը
are_you_sure: Վստա՞հ ես are_you_sure: Վստա՞հ ես
avatar: Աւատար avatar: Աւատար
by_domain: Դոմէն by_domain: Դոմէն
@ -108,6 +116,7 @@ hy:
delete: Ջնջել տվյալները delete: Ջնջել տվյալները
deleted: Ջնջված է deleted: Ջնջված է
demote: Աստիճանազրկել demote: Աստիճանազրկել
destroyed_msg: "%{username}֊ի տուեալները հերթագրուել է անյապաղ ջնջուողների շարքում"
disable: Անջատել disable: Անջատել
disable_two_factor_authentication: Անջատել 2FA disable_two_factor_authentication: Անջատել 2FA
disabled: Անջատված է disabled: Անջատված է
@ -118,10 +127,12 @@ hy:
email_status: Էլ․ փոստի կարգավիճակ email_status: Էլ․ փոստի կարգավիճակ
enable: Միացնել enable: Միացնել
enabled: Միացված է enabled: Միացված է
enabled_msg: "%{username}֊ի հաշիւը բարեյաջող ապասառեցուեց"
followers: Հետևորդներ followers: Հետևորդներ
follows: Հետևողներ follows: Հետևողներ
header: Վերնագիր header: Վերնագիր
inbox_url: Մուտքային URL inbox_url: Մուտքային URL
invite_request_text: Միանալու պատճառները
invited_by: Հրաւիրուել է invited_by: Հրաւիրուել է
ip: IP ip: IP
joined: Միացած է joined: Միացած է
@ -133,6 +144,8 @@ hy:
login_status: Մուտքի կարգավիճակ login_status: Մուտքի կարգավիճակ
media_attachments: Մեդիա կցորդներ media_attachments: Մեդիա կցորդներ
memorialize: Դարձնել հիշատակարան memorialize: Դարձնել հիշատակարան
memorialized: Յիշեցուած
memorialized_msg: Բարեյաջող %{username}֊ը փոխուեց յիշատակի հաշուի
moderation: moderation:
active: Ակտիվ active: Ակտիվ
all: Բոլորը all: Բոլորը
@ -143,6 +156,7 @@ hy:
moderation_notes: Մոդերացիայի նշումներ moderation_notes: Մոդերացիայի նշումներ
most_recent_activity: Վերջին ակտիւութիւնը most_recent_activity: Վերջին ակտիւութիւնը
most_recent_ip: Վերջին IP most_recent_ip: Վերջին IP
no_account_selected: Ոչ մի հաշիւ չի փոխուել, ինչպէս նաեւ, ոչ մեկը չի ընտրուել
no_limits_imposed: Սահմանափակումներ չկան no_limits_imposed: Սահմանափակումներ չկան
not_subscribed: Բաժանորդագրուած չէ not_subscribed: Բաժանորդագրուած չէ
pending: Սպասում է վերանայման pending: Սպասում է վերանայման
@ -150,11 +164,16 @@ hy:
promote: Աջակցել promote: Աջակցել
protocol: Հաղորդակարգ protocol: Հաղորդակարգ
public: Հրապարակային public: Հրապարակային
push_subscription_expires: PuSH բաժանորդագրութիւնը սպառուում է
redownload: Թարմացնել հաշիւը redownload: Թարմացնել հաշիւը
redownloaded_msg: "%{username}֊ի հաշիւը սկզբնաղբիւրից բարեյաջող թարմացուեց"
reject: Մերժել reject: Մերժել
reject_all: Մերժել բոլորը reject_all: Մերժել բոլորը
rejected_msg: Յաջողութեամբ մերժուեց %{username}֊ի գրանցման յայտը
remove_avatar: Հեռացնել աւատարը remove_avatar: Հեռացնել աւատարը
remove_header: Հեռացնել գլխագիրը remove_header: Հեռացնել գլխագիրը
removed_avatar_msg: Յաջողութեամբ հեռացուեց %{username}֊ի աւատարը
removed_header_msg: Յաջողութեամբ հեռացուեց %{username}֊ի գլխանկարը
resend_confirmation: resend_confirmation:
already_confirmed: Օգտատէրն արդէն հաստատուած է already_confirmed: Օգտատէրն արդէն հաստատուած է
send: Հաստատման իմակն ուղարկել կրկին send: Հաստատման իմակն ուղարկել կրկին
@ -172,6 +191,8 @@ hy:
search_same_email_domain: Այլ օգտատէրեր նոյն էլ․ փոստի դոմէյնով search_same_email_domain: Այլ օգտատէրեր նոյն էլ․ փոստի դոմէյնով
search_same_ip: Այլ օգտատէրեր նոյն IP֊ով search_same_ip: Այլ օգտատէրեր նոյն IP֊ով
sensitive: Զգայուն sensitive: Զգայուն
sensitized: նշուեց որպէս դիւրազգաց
shared_inbox_url: Ընդհանուր մուտքային URL
show: show:
created_reports: Կազմել բողոքներ created_reports: Կազմել բողոքներ
targeted_reports: Այլոց կողմից բողոքարկուած targeted_reports: Այլոց կողմից բողոքարկուած
@ -180,15 +201,22 @@ hy:
statuses: Գրառումներ statuses: Գրառումներ
subscribe: Բաժանորդագրուել subscribe: Բաժանորդագրուել
suspended: Կասեցուած suspended: Կասեցուած
suspension_irreversible: Հաշուի տուեալները անդարձ ջնջուեցին։ Դու կարող ես ապակասեցնել հաշիւը՝ դարձնելով այն կիրառելի, բայց այն չի վերականգնի նախկին տուեալները։
suspension_reversible_hint_html: Հաշիւը կասեցուեց, եւ տուեալներն ամբողջապէս կը վերացուի %{date}ին։ Մինչեւ այդ, հաշիւը կարող է վերականգնուել՝ առանց կողմնակի ազդեցութիւնների։ Եթէ ցանկանում ես վերացնել հաշուի տուեալները միանգամից, կարող ես դա անել ներքեւում։
time_in_queue: Հերթում է %{time} time_in_queue: Հերթում է %{time}
title: Հաշիւներ title: Հաշիւներ
unconfirmed_email: Չհաստատուած էլ․ հասցէ unconfirmed_email: Չհաստատուած էլ․ հասցէ
undo_sensitized: Ետարկել դիւրազգացութիւնը
undo_silenced: Ետարկել լռեցումը undo_silenced: Ետարկել լռեցումը
undo_suspension: Ետարկել կասեցումը undo_suspension: Ետարկել կասեցումը
unsilenced_msg: "%{username}֊ի հաշիւը բարեյաջող դարձաւ անսահմանափակ"
unsubscribe: Ապաբաժանորդագրուել unsubscribe: Ապաբաժանորդագրուել
unsuspended_msg: "%{username}֊ի հաշիւ բարեյաջող ապակասեցուեց։"
username: Մուտքանուն username: Մուտքանուն
view_domain: Տեսնել տիրոյթի ամփոփումը
warn: Նախազգուշացում warn: Նախազգուշացում
web: Վեբ web: Վեբ
whitelisted: Թոյլատրել ֆեդերացիայի համար
action_logs: action_logs:
action_types: action_types:
assigned_to_self_report: Բողոքել assigned_to_self_report: Բողոքել
@ -197,9 +225,13 @@ hy:
create_account_warning: Ստեղծել զգուշացում create_account_warning: Ստեղծել զգուշացում
create_announcement: Ստեղծել յայտարարութիւն create_announcement: Ստեղծել յայտարարութիւն
create_custom_emoji: Ստեղծել սեփական էմոջիները create_custom_emoji: Ստեղծել սեփական էմոջիները
create_domain_allow: Ստեղծել տիրոյթի թոյլտուութիւն
create_domain_block: Ստեղծել տիրոյթի արգելափակում
create_email_domain_block: Ստեղծել էլ․ հասցէի դոմէյնի արգելափակում create_email_domain_block: Ստեղծել էլ․ հասցէի դոմէյնի արգելափակում
create_ip_block: Ստեղծել IP կանոն create_ip_block: Ստեղծել IP կանոն
demote_user: Աստիճանազրկել օգտատիրոջը
destroy_announcement: Ջնջել յայտարարութիւնը destroy_announcement: Ջնջել յայտարարութիւնը
destroy_custom_emoji: Ջնջել էմոջին
destroy_domain_allow: Ջնջել դոմէնի թոյլտուութիւնը destroy_domain_allow: Ջնջել դոմէնի թոյլտուութիւնը
destroy_domain_block: Ապաարգելափակել դոմէնը destroy_domain_block: Ապաարգելափակել դոմէնը
destroy_email_domain_block: Ապաարգելափակել էլ․ հասցէի դոմէնը destroy_email_domain_block: Ապաարգելափակել էլ․ հասցէի դոմէնը
@ -216,13 +248,16 @@ hy:
reopen_report: Վերաբացել բողոքը reopen_report: Վերաբացել բողոքը
reset_password_user: Վերականգնել գաղտանաբառը reset_password_user: Վերականգնել գաղտանաբառը
resolve_report: Լուծարել զեկոյցը resolve_report: Լուծարել զեկոյցը
sensitive_account: Հաշուի մեդիան նշել որպէս դիւրազգաց
silence_account: Լռեցնել հաշիւը silence_account: Լռեցնել հաշիւը
suspend_account: Կասեցնել հաշիւը suspend_account: Կասեցնել հաշիւը
unassigned_report: Հանել բողոքը unassigned_report: Հանել բողոքը
unsensitive_account: Հաշուի մեդիան չնշել որպէս դիւրազգաց
unsilence_account: Լսել հաշուին unsilence_account: Լսել հաշուին
unsuspend_account: Ապակասեցնել հաշիւը unsuspend_account: Ապակասեցնել հաշիւը
update_announcement: Թարմացնել յայտարարութիւնը update_announcement: Թարմացնել յայտարարութիւնը
update_custom_emoji: Թարմացնել սեփական էմոջիները update_custom_emoji: Թարմացնել սեփական էմոջիները
update_domain_block: Թարմացնել տիրոյթի արգելափակումը
update_status: Թարմացնել գրառումը update_status: Թարմացնել գրառումը
actions: actions:
assigned_to_self_report: "%{name} բողոքել է %{target} իրենց համար" assigned_to_self_report: "%{name} բողոքել է %{target} իրենց համար"
@ -230,13 +265,23 @@ hy:
confirm_user: "%{name} հաստատել է %{target} օգտատիրոջ էլ․ հասցէն" confirm_user: "%{name} հաստատել է %{target} օգտատիրոջ էլ․ հասցէն"
create_account_warning: "%{name} զգուշացրել է %{target}ին" create_account_warning: "%{name} զգուշացրել է %{target}ին"
create_announcement: "%{name} ստեղծեց նոր յայտարարութիւն %{target}" create_announcement: "%{name} ստեղծեց նոր յայտարարութիւն %{target}"
create_custom_emoji: "%{name} վերբեռնել է նոր էմոջի՝ %{target}"
create_domain_allow: "%{name} թոյլատրել ֆեդերացիան %{target} տիրոյթի հետ"
create_domain_block: "%{name} արգելափակեց %{target} տիրոյթը"
create_email_domain_block: "%{name} արգելափակեց էլ․ փոստի տիրոյթ %{target}" create_email_domain_block: "%{name} արգելափակեց էլ․ փոստի տիրոյթ %{target}"
create_ip_block: "%{name} ստեղծեց կանոն %{target} IP֊ի համար"
demote_user: "%{name} աստիճանազրկեց օգտատիրոջ %{target}" demote_user: "%{name} աստիճանազրկեց օգտատիրոջ %{target}"
destroy_announcement: "%{name} ջնջեց յայտարարութիւն %{target}" destroy_announcement: "%{name} ջնջեց յայտարարութիւն %{target}"
destroy_custom_emoji: "%{name} ջնջել է %{target} էմոջին"
destroy_domain_allow: "%{name} չթոյլատրեց ֆեդերացիան %{target} տիրոյթի հետ"
destroy_domain_block: "%{name} ապաարգելափակեց տիրոյթ %{target}" destroy_domain_block: "%{name} ապաարգելափակեց տիրոյթ %{target}"
destroy_email_domain_block: "%{name} ապաարգելափակեց էլ․ փոստի տիրոյթ %{target}" destroy_email_domain_block: "%{name} ապաարգելափակեց էլ․ փոստի տիրոյթ %{target}"
destroy_ip_block: "%{name} ջնջեց կանոնը %{target} IP֊ի համար"
destroy_status: "%{name} ջնջեց %{target}ի գրառում" destroy_status: "%{name} ջնջեց %{target}ի գրառում"
disable_2fa_user: "%{name}ը կասեցրեց 2F պահանջը %{target} օգտատիրոջ համար"
disable_custom_emoji: "%{name} ապակտիւացրել է %{target} էմոջին"
disable_user: "%{name} անջատել է մուտքը %{target} օգտատիրոջ համար" disable_user: "%{name} անջատել է մուտքը %{target} օգտատիրոջ համար"
enable_custom_emoji: "%{name} ակտիվացրել է %{target} էմոջին"
enable_user: "%{name} թոյլատրեց մուտք %{target} օգտատիրոջ համար" enable_user: "%{name} թոյլատրեց մուտք %{target} օգտատիրոջ համար"
memorialize_account: "%{name} դարձրեց %{target}ի հաշիւը յիշատակի էջ" memorialize_account: "%{name} դարձրեց %{target}ի հաշիւը յիշատակի էջ"
promote_user: "%{name} աջակցեց օգտատիրոջը %{target}" promote_user: "%{name} աջակցեց օգտատիրոջը %{target}"
@ -244,9 +289,17 @@ hy:
reopen_report: "%{name} վերաբացեց բողոք %{target}" reopen_report: "%{name} վերաբացեց բողոք %{target}"
reset_password_user: "%{name} վերականգնեց օգտատիրոջ գաղտնաբառը %{target}" reset_password_user: "%{name} վերականգնեց օգտատիրոջ գաղտնաբառը %{target}"
resolve_report: "%{name} լուծարեց բողոքը %{target}" resolve_report: "%{name} լուծարեց բողոքը %{target}"
sensitive_account: "%{name}ը նշեց %{target}ի մեդիան որպէս զգայուն"
silence_account: "%{name} լռեցրեց %{target}ի հաշիւը" silence_account: "%{name} լռեցրեց %{target}ի հաշիւը"
suspend_account: "%{name} լռեցրեց %{target}ի հաշիւը" suspend_account: "%{name} լռեցրեց %{target}ի հաշիւը"
unassigned_report: "%{name} չսահմանուած բողոք %{target}" unassigned_report: "%{name} չսահմանուած բողոք %{target}"
unsensitive_account: "%{name}ը հեռացրեց %{target}֊ի մեդիայի զգայուն նշումը"
unsilence_account: "%{name}֊ը հանեց լռեցումը %{target}֊ի հաշուից"
unsuspend_account: "%{name}ը ապակասեցրեց %{target}ի հաշիւը"
update_announcement: "%{name}ը թարմացրեց %{target}ի յայտարարութիւնը"
update_custom_emoji: "%{name} թարմացրել է %{target} էմոջին"
update_domain_block: "%{name}ը թարմացրեց %{target}ի տիրոյթի արգելափակումը"
update_status: "%{name}ը թարմացրեց %{target}ի կարգավիճակը"
deleted_status: "(ջնջուած գրառում)" deleted_status: "(ջնջուած գրառում)"
empty: Ոչ մի գրառում չկայ։ empty: Ոչ մի գրառում չկայ։
filter_by_action: Զտել ըստ գործողութեան filter_by_action: Զտել ըստ գործողութեան
@ -270,35 +323,48 @@ hy:
custom_emojis: custom_emojis:
assign_category: Կցել կատեգորիա assign_category: Կցել կատեգորիա
by_domain: Տիրոյթ by_domain: Տիրոյթ
copied_msg: Էմոջիի տեղական օրինակը հաջողութեամբ ստեղծուած է
copy: Պատճենել copy: Պատճենել
copy_failed_msg: Չյաջողւեց ստեղծել էմոջիի տեղական օրինակ
create_new_category: Ստեղծել նոր կատեգորիա create_new_category: Ստեղծել նոր կատեգորիա
created_msg: Էմոջին յաջողութեամբ ստեղծուեց
delete: Ջնջել delete: Ջնջել
destroyed_msg: Էմոջին յաջողութեամբ ջնջուեց
disable: Անջատել disable: Անջատել
disabled: Անջատուած disabled: Անջատուած
disabled_msg: Յաջողութեամբ կասեցուեց էմոջին
emoji: Զմայլիկ emoji: Զմայլիկ
enable: Միացնել enable: Միացնել
enabled: Միացուած enabled: Միացուած
enabled_msg: Յաջողութեամբ միացուեց էմոջին
image_hint: PNG մինչեւ 50KB image_hint: PNG մինչեւ 50KB
list: Ցանկ list: Ցանկ
listed: Ցուցակագրուած listed: Ցուցակագրուած
new: new:
title: Աւելացնել նոր էմոջի title: Աւելացնել նոր էմոջի
not_permitted: Տուեալ գործողութիւնն անելու թոյլտուութիւն չունես
overwrite: Վերագրել overwrite: Վերագրել
shortcode: Հապավում shortcode: Հապավում
shortcode_hint: Ամենաքիչը 2 նիշ, միայն այբբենական նիշեր, թուեր եւ ընդգծիկներ
title: Սեփական էմօջիներ title: Սեփական էմօջիներ
uncategorized: Չդասակարգուած uncategorized: Չդասակարգուած
unlist: Ապացուցակագրում unlist: Ապացուցակագրում
unlisted: Ծածուկ unlisted: Ծածուկ
update_failed_msg: Էմոջին չի կարող թարմացուել
updated_msg: Էմոջին թարմացուեց
upload: Վերբեռնել upload: Վերբեռնել
dashboard: dashboard:
authorized_fetch_mode: Անվտանգ եղանակ
config: Կարգաւորում config: Կարգաւորում
feature_deletions: Հաշուի հեռացումներ feature_deletions: Հաշուի հեռացումներ
feature_invites: Հրաւէրի յղումներ feature_invites: Հրաւէրի յղումներ
feature_profile_directory: Օգտատիրոջ մատեան feature_profile_directory: Օգտատիրոջ մատեան
feature_registrations: Գրանցումներ feature_registrations: Գրանցումներ
feature_relay: Ֆեդերացիայի շերտ
feature_spam_check: Հակա-սպամ feature_spam_check: Հակա-սպամ
feature_timeline_preview: Հոսքի նախադիտում feature_timeline_preview: Հոսքի նախադիտում
features: Յատկանիշներ features: Յատկանիշներ
hidden_service: Ֆեդերացիա թաքնուած ծառայութիւնների հետ
open_reports: բաց բողոքներ open_reports: բաց բողոքներ
pending_tags: պիտակներն սպասում են վերանայման pending_tags: պիտակներն սպասում են վերանայման
pending_users: օգտատէրերն սպասում են վերանայման pending_users: օգտատէրերն սպասում են վերանայման
@ -316,7 +382,12 @@ hy:
whitelist_mode: Սահմանափակ ֆեդերացիայի ռեժիմ whitelist_mode: Սահմանափակ ֆեդերացիայի ռեժիմ
domain_allows: domain_allows:
add_new: Թոյլատրել ֆեդերացիա տիրոյթի հետ add_new: Թոյլատրել ֆեդերացիա տիրոյթի հետ
created_msg: Տիրոյթը յաջողութեամբ թոյլատրուեց ֆեդերացուելու
undo: Չթոյլատրել ֆեդերացիան տիրոյթի հետ
domain_blocks: domain_blocks:
add_new: Աւելացնել նոր տիրոյթի արգելափակում
created_msg: Տիրոյթի արգելափակումն ընթացաւ
destroyed_msg: Տիրոյթի արգելափակումը ետարկուեց
domain: Տիրոյթ domain: Տիրոյթ
edit: Խմբագրել տիրոյթի արգելափակումը edit: Խմբագրել տիրոյթի արգելափակումը
new: new:
@ -336,6 +407,7 @@ hy:
silence: լռեցուած silence: լռեցուած
suspend: կասեցուած suspend: կասեցուած
show: show:
title: Ետարկել տիրոյթի արգելափակումը %{domain}ի համար
undo: Ետարկել undo: Ետարկել
undo: Ետարկել տիրոյթի արգելափակումը undo: Ետարկել տիրոյթի արգելափակումը
view: Տեսնել տիրոյթի արգելափակումը view: Տեսնել տիրոյթի արգելափակումը
@ -379,6 +451,7 @@ hy:
title: Հրաւէրներ title: Հրաւէրներ
ip_blocks: ip_blocks:
add_new: Ստեղծել կանոն add_new: Ստեղծել կանոն
created_msg: Բարեյաջող աւելացուեց նոր IP կանոն
delete: Ջնջել delete: Ջնջել
expires_in: expires_in:
'1209600': 2 շաբաթ '1209600': 2 շաբաթ
@ -409,6 +482,9 @@ hy:
notes: notes:
one: "%{count} նոթ" one: "%{count} նոթ"
other: "%{count} նոթեր" other: "%{count} նոթեր"
reports:
one: "%{count} զեկոյց"
other: "%{count} զեկոյց"
action_taken_by: Գործողութիւնը կատարել է action_taken_by: Գործողութիւնը կատարել է
are_you_sure: Վստա՞հ ես are_you_sure: Վստա՞հ ես
assign_to_self: Ինձ յանձնարարուած assign_to_self: Ինձ յանձնարարուած
@ -441,6 +517,8 @@ hy:
all: Բոլորին all: Բոլորին
disabled: Ոչ մէկին disabled: Ոչ մէկին
title: Ցուցադրել տիրոյթը արգելափակումները title: Ցուցադրել տիրոյթը արգելափակումները
hero:
title: Հերոսի պատկեր
profile_directory: profile_directory:
desc_html: Թոյլատրել օգտատէրերին բացայայտուել desc_html: Թոյլատրել օգտատէրերին բացայայտուել
title: Միացնել հաշուի մատեանը title: Միացնել հաշուի մատեանը
@ -513,6 +591,7 @@ hy:
advanced_web_interface: Սյունակավոր ինտերֆեյս advanced_web_interface: Սյունակավոր ինտերֆեյս
advanced_web_interface_hint: Եթէ ցանկանում ես օգտագործել էկրանիդ ամբողջ լայնքը, ապա ընդլայնուած վեբ ինտերֆեյսով հնարաւոր է էկրանը բաժանել սիւնակների՝ զուգահեռ տեսնելու տարբեր տիպի ինֆորմացիա՝ տեղական հոսքը, ծանուցումները, ֆեդերացված հոսքը, և ցանկացած թվի ցուցակ ու հեշթեգ։ advanced_web_interface_hint: Եթէ ցանկանում ես օգտագործել էկրանիդ ամբողջ լայնքը, ապա ընդլայնուած վեբ ինտերֆեյսով հնարաւոր է էկրանը բաժանել սիւնակների՝ զուգահեռ տեսնելու տարբեր տիպի ինֆորմացիա՝ տեղական հոսքը, ծանուցումները, ֆեդերացված հոսքը, և ցանկացած թվի ցուցակ ու հեշթեգ։
animations_and_accessibility: Անիմացիաներ եւ հասանելիութիւն animations_and_accessibility: Անիմացիաներ եւ հասանելիութիւն
confirmation_dialogs: Հաստատման պատուհաններ
discovery: Բացայայտում discovery: Բացայայտում
localization: localization:
body: Մաստոդոնը թարգմանուում է կամաւորների կողմից։ body: Մաստոդոնը թարգմանուում է կամաւորների կողմից։
@ -533,6 +612,8 @@ hy:
checkbox_agreement_html: Ես համաձայն եմ <a href="%{rules_path}" target="_blank">սպասարկչի կայանքներին</a> և <a href="%{terms_path}" target="_blank">ծառայությունների պայմաններին</a> checkbox_agreement_html: Ես համաձայն եմ <a href="%{rules_path}" target="_blank">սպասարկչի կայանքներին</a> և <a href="%{terms_path}" target="_blank">ծառայությունների պայմաններին</a>
checkbox_agreement_without_rules_html: Ես համաձայն եմ <a href="%{terms_path}" target="_blank">ծառայությունների պայմաններին</a> checkbox_agreement_without_rules_html: Ես համաձայն եմ <a href="%{terms_path}" target="_blank">ծառայությունների պայմաններին</a>
delete_account: Ջնջել հաշիվը delete_account: Ջնջել հաշիվը
description:
prefix_sign_up: Գրանցուի՛ր Մաստոդոնում հենց այսօր
forgot_password: Մոռացե՞լ ես գաղտնաբառդ forgot_password: Մոռացե՞լ ես գաղտնաբառդ
login: Մտնել login: Մտնել
logout: Դուրս գալ logout: Դուրս գալ
@ -664,6 +745,8 @@ hy:
status: Հաստատման կարգավիճակ status: Հաստատման կարգավիճակ
view_proof: Նայել ապացոյցը view_proof: Նայել ապացոյցը
imports: imports:
errors:
over_rows_processing_limit: տողերի քանակը աւելին է քան %{count}-ը
modes: modes:
merge: Միաւորել merge: Միաւորել
overwrite: Վերագրել overwrite: Վերագրել
@ -786,6 +869,7 @@ hy:
safari: Safari safari: Safari
uc_browser: UCBrowser uc_browser: UCBrowser
weibo: Weibo weibo: Weibo
description: "%{browser}, %{platform}"
ip: IP ip: IP
platforms: platforms:
adobe_air: Adobe Air adobe_air: Adobe Air
@ -830,6 +914,9 @@ hy:
image: image:
one: "%{count} նկար" one: "%{count} նկար"
other: "%{count} նկար" other: "%{count} նկար"
video:
one: "%{count} վիդեո"
other: "%{count} վիդեո"
language_detection: Ինքնուրոյն ճանաչել լեզուն language_detection: Ինքնուրոյն ճանաչել լեզուն
open_in_web: Բացել վէբում open_in_web: Բացել վէբում
over_character_limit: "%{max} նիշի սահմանը գերազանցուած է" over_character_limit: "%{max} նիշի սահմանը գերազանցուած է"
@ -976,6 +1063,7 @@ hy:
welcome: welcome:
edit_profile_action: Կարգաւորել հաշիւը edit_profile_action: Կարգաւորել հաշիւը
final_action: Սկսել թթել final_action: Սկսել թթել
final_step: 'Սկսիր թթե՛լ։ Անգամ առանց հետեւորդների քո հանրային գրառումներ կարող են երևալ ուրիշների մօտ, օրինակ՝ տեղական հոսում կամ հեշթեգերում։ Թէ ցանկանաս, կարող ես յայտնել քո մասին օգտագործելով #եսնորեկեմ հեշթեգը։'
review_preferences_action: Փոփոխել կարգաւորումները review_preferences_action: Փոփոխել կարգաւորումները
subject: Բարի գալուստ Մաստոդոն subject: Բարի գալուստ Մաստոդոն
tip_federated_timeline: Դաշնային հոսքում երևում է ամբողջ Մաստոդոնի ցանցը։ Բայց այն ներառում է միայն այն օգտատերերին որոնց բաժանորդագրուած են ձեր հարևաններ, այդ պատճառով այն կարող է լինել ոչ ամբողջական։ tip_federated_timeline: Դաշնային հոսքում երևում է ամբողջ Մաստոդոնի ցանցը։ Բայց այն ներառում է միայն այն օգտատերերին որոնց բաժանորդագրուած են ձեր հարևաններ, այդ պատճառով այն կարող է լինել ոչ ամբողջական։
@ -994,4 +1082,5 @@ hy:
verification: Ստուգում verification: Ստուգում
webauthn_credentials: webauthn_credentials:
delete: Ջնջել delete: Ջնջել
not_enabled: WebAuthn-ը դեռ միացուած չէ
registered_on: Գրանցուել է %{date} registered_on: Գրանցուել է %{date}

@ -128,7 +128,7 @@ ja:
follows: フォロー数 follows: フォロー数
header: ヘッダー header: ヘッダー
inbox_url: Inbox URL inbox_url: Inbox URL
invite_request_text: 登録理由 invite_request_text: 意気込み
invited_by: 招待した人 invited_by: 招待した人
ip: IP ip: IP
joined: 登録日 joined: 登録日
@ -398,6 +398,8 @@ ja:
silence: サイレンス silence: サイレンス
suspend: 停止 suspend: 停止
title: 新規ドメインブロック title: 新規ドメインブロック
obfuscate: ドメイン名を伏せ字にする
obfuscate_hint: ドメインブロックのリストを公開している場合、ドメイン名の一部を伏せ字にします
private_comment: コメント (非公開) private_comment: コメント (非公開)
private_comment_hint: このコメントは同じサーバーのモデレーターも閲覧できます。 private_comment_hint: このコメントは同じサーバーのモデレーターも閲覧できます。
public_comment: コメント (公開) public_comment: コメント (公開)
@ -556,6 +558,7 @@ ja:
domain_blocks_rationale: domain_blocks_rationale:
title: コメントを表示 title: コメントを表示
enable_bootstrap_timeline_accounts: enable_bootstrap_timeline_accounts:
desc_html: 新規ユーザーが設定したアカウントを自動的にフォローして、ホームフィードが空にならないようにする
title: 新規ユーザーの自動フォローを有効にする title: 新規ユーザーの自動フォローを有効にする
hero: hero:
desc_html: フロントページに表示されます。サイズは600x100px以上推奨です。未設定の場合、標準のサムネイルが使用されます desc_html: フロントページに表示されます。サイズは600x100px以上推奨です。未設定の場合、標準のサムネイルが使用されます
@ -582,6 +585,9 @@ ja:
min_invite_role: min_invite_role:
disabled: 誰にも許可しない disabled: 誰にも許可しない
title: 招待の作成を許可 title: 招待の作成を許可
require_invite_text:
desc_html: アカウント登録が承認制の場合、「意気込みをお聞かせください」のテキストを必須入力にする
title: 新規ユーザー登録時の理由を必須入力にする
registrations_mode: registrations_mode:
modes: modes:
approved: 登録には承認が必要 approved: 登録には承認が必要
@ -909,6 +915,8 @@ ja:
status: 認証状態 status: 認証状態
view_proof: 証明を表示 view_proof: 証明を表示
imports: imports:
errors:
over_rows_processing_limit: "%{count} 行以上"
modes: modes:
merge: 統合 merge: 統合
merge_long: 現在のレコードを保持したまま新しいものを追加します merge_long: 現在のレコードを保持したまま新しいものを追加します

@ -172,7 +172,7 @@ ko:
removed_header_msg: 성공적으로 %{username}의 헤더 이미지를 삭제하였습니다 removed_header_msg: 성공적으로 %{username}의 헤더 이미지를 삭제하였습니다
resend_confirmation: resend_confirmation:
already_confirmed: 이 사용자는 이미 확인되었습니다 already_confirmed: 이 사용자는 이미 확인되었습니다
send: 다시 확인 메일 send: 확인 메일 다시 보내기
success: 확인 이메일이 전송되었습니다! success: 확인 이메일이 전송되었습니다!
reset: 초기화 reset: 초기화
reset_password: 암호 초기화 reset_password: 암호 초기화
@ -917,6 +917,8 @@ ko:
status: 인증 상태 status: 인증 상태
view_proof: 증명 보기 view_proof: 증명 보기
imports: imports:
errors:
over_rows_processing_limit: "%{count}개 이상의 열을 포함합니다"
modes: modes:
merge: 병합 merge: 병합
merge_long: 기존 것을 그대로 둔 채 새로 추가 merge_long: 기존 것을 그대로 둔 채 새로 추가

@ -47,6 +47,7 @@ oc:
what_is_mastodon: Ques Mastodon? what_is_mastodon: Ques Mastodon?
accounts: accounts:
choices_html: 'Recomandacions de %{name} :' choices_html: 'Recomandacions de %{name} :'
endorsements_hint: Podètz recomandar personas que seguètz a partir de linterfàcia web, apreissaràn aquí.
featured_tags_hint: Podètz indicar detiquetas que mostrarem aquí. featured_tags_hint: Podètz indicar detiquetas que mostrarem aquí.
follow: Sègre follow: Sègre
followers: followers:
@ -710,8 +711,8 @@ oc:
prompt: Confirmatz lo senhal per dire de contunhar prompt: Confirmatz lo senhal per dire de contunhar
date: date:
formats: formats:
default: "%e %B de %Y" default: "%-d %B de %Y"
with_month_name: "%e %B de %Y" with_month_name: "%-d %B de %Y"
datetime: datetime:
distance_in_words: distance_in_words:
about_x_hours: "%{count} h" about_x_hours: "%{count} h"
@ -986,13 +987,13 @@ oc:
activity: Activitat del compte activity: Activitat del compte
dormant: Inactiu dormant: Inactiu
followers: Seguidors followers: Seguidors
following: Aboanements following: Abonaments
invited: Convidat invited: Convidat
last_active: Darrièra activitat last_active: Darrièra activitat
most_recent: Mai recenta most_recent: Mai recenta
moved: Mudat moved: Mudat
mutual: Mutuala mutual: Mutuala
primary: Pirmària primary: Primària
relationship: Relacion relationship: Relacion
remove_selected_domains: Levar totes los seguidors dels domenis seleccionats remove_selected_domains: Levar totes los seguidors dels domenis seleccionats
remove_selected_followers: Levar los seguidors seleccionats remove_selected_followers: Levar los seguidors seleccionats
@ -1225,7 +1226,7 @@ oc:
mastodon-light: Mastodon (Clar) mastodon-light: Mastodon (Clar)
time: time:
formats: formats:
default: Lo %e %B de %Y a %Ho%M default: Lo %-d %B de %Y a %Ho%M
month: "%B de %Y" month: "%B de %Y"
two_factor_authentication: two_factor_authentication:
add: Ajustar add: Ajustar

@ -66,10 +66,16 @@ hy:
invite_request: invite_request:
text: Սա կօգնի մեզ ստուգել քո յաւելուածը text: Սա կօգնի մեզ ստուգել քո յաւելուածը
ip_block: ip_block:
comment: Պայմանական․ Յիշիր ինչու ես աւելացրել այս կանոնը։
expires_in: IP հասցէները սահմանափակ են, դրանք երբեմն օգտագործուում են ընդհանուր կամ անցնում ձեռքից ձեռք։ Այդ պատճառով խորհուրդ չի տրւում IP-ների անժամկետ արգելափակումը։ expires_in: IP հասցէները սահմանափակ են, դրանք երբեմն օգտագործուում են ընդհանուր կամ անցնում ձեռքից ձեռք։ Այդ պատճառով խորհուրդ չի տրւում IP-ների անժամկետ արգելափակումը։
ip: Ներմուծէք IPv4 կամ IPv6 հասցէն։ Նաև կարող ես արգելափակել հասցէների միջակայքեր օգտագործելով CIDR սինտաքսը։ Զգոյշ եղիր՝ ինքդ քեզ չարգելափակես։ ip: Ներմուծէք IPv4 կամ IPv6 հասցէն։ Նաև կարող ես արգելափակել հասցէների միջակայքեր օգտագործելով CIDR սինտաքսը։ Զգոյշ եղիր՝ ինքդ քեզ չարգելափակես։
severities:
no_access: Արգելափակիր հասանելիութիւնը բոլոր պաշարներին։
sign_up_requires_approval: Նոր գրանցումները կը պահանջեն քո հաստատումը
severity: Ընտրիր, թէ ինչ կարող է պատահել այս IP֊ից եկող յայտերի հետ
sessions: sessions:
otp: Մուտքագրիր երկքայլ նոյնականացման կոդը, որը գեներացուես ես քո բջջային յաւելուածի օգնութեամբ կամ օգտագործիր այս կոդերից կէկը՝ otp: Մուտքագրիր երկքայլ նոյնականացման կոդը, որը գեներացուես ես քո բջջային յաւելուածի օգնութեամբ կամ օգտագործիր այս կոդերից կէկը՝
webauthn: Եթէ սա USB է՝ վստահ եղիր տեղադրել այն եւ եթէ անհրաժեշտ է՝ թափահարել։
tag: tag:
name: Կարող ես միայն փոխել տառերի ձեւը, օրինակ, այն աւելի ընթեռնելի դարձնելու համար name: Կարող ես միայն փոխել տառերի ձեւը, օրինակ, այն աւելի ընթեռնելի դարձնելու համար
user: user:
@ -140,6 +146,7 @@ hy:
setting_default_privacy: Հրապարակման գաղտնիութիւն setting_default_privacy: Հրապարակման գաղտնիութիւն
setting_default_sensitive: Միշտ նշել մեդիան որպէս դիւրազգաց setting_default_sensitive: Միշտ նշել մեդիան որպէս դիւրազգաց
setting_delete_modal: Ցուցադրել հաստատման պատուհանը ջնջելուց առաջ setting_delete_modal: Ցուցադրել հաստատման պատուհանը ջնջելուց առաջ
setting_disable_swiping: Կասեցնել սահող շարժումները
setting_display_media: Ցուցադրել մեդիա setting_display_media: Ցուցադրել մեդիա
setting_display_media_default: Լռելեայն setting_display_media_default: Լռելեայն
setting_display_media_hide_all: Թաքցնել բոլորը setting_display_media_hide_all: Թաքցնել բոլորը
@ -200,4 +207,7 @@ hy:
required: required:
mark: "*" mark: "*"
text: պարտադիր text: պարտադիր
title:
sessions:
webauthn: Օգտագործիր անվտանգութեան բանալիները գրանցուելու համար
'yes': Այո 'yes': Այո

@ -126,6 +126,7 @@ ja:
expires_in: 有効期限 expires_in: 有効期限
fields: プロフィール補足情報 fields: プロフィール補足情報
header: ヘッダー header: ヘッダー
honeypot: "%{label} (入力しない)"
inbox_url: リレーサーバーの inbox URL inbox_url: リレーサーバーの inbox URL
irreversible: 隠すのではなく除外する irreversible: 隠すのではなく除外する
locale: 言語 locale: 言語

@ -204,7 +204,7 @@ vi:
unconfirmed_email: Email chưa được xác thực unconfirmed_email: Email chưa được xác thực
undo_sensitized: Đánh dấu bình thường undo_sensitized: Đánh dấu bình thường
undo_silenced: Bỏ ẩn undo_silenced: Bỏ ẩn
undo_suspension: Ngừng vô hiệu hóa undo_suspension: Bỏ vô hiệu hóa
unsilenced_msg: Bỏ ẩn %{username} thành công unsilenced_msg: Bỏ ẩn %{username} thành công
unsubscribe: Hủy đăng ký unsubscribe: Hủy đăng ký
unsuspended_msg: Đã kích hoạt lại %{username} thành công unsuspended_msg: Đã kích hoạt lại %{username} thành công
@ -215,8 +215,8 @@ vi:
whitelisted: Danh sách trắng whitelisted: Danh sách trắng
action_logs: action_logs:
action_types: action_types:
assigned_to_self_report: Xử lý báo cáo được giao assigned_to_self_report: Tự xử lý báo cáo
change_email_user: Đổi email cho người dùng change_email_user: Đổi email
confirm_user: Xác nhận người dùng confirm_user: Xác nhận người dùng
create_account_warning: Gửi cảnh cáo create_account_warning: Gửi cảnh cáo
create_announcement: Tạo thông báo create_announcement: Tạo thông báo
@ -228,16 +228,16 @@ vi:
demote_user: Xóa chức vụ demote_user: Xóa chức vụ
destroy_announcement: Xóa thông báo destroy_announcement: Xóa thông báo
destroy_custom_emoji: Xóa Emoji destroy_custom_emoji: Xóa Emoji
destroy_domain_allow: Gỡ máy chủ cho phép destroy_domain_allow: Bỏ máy chủ cho phép
destroy_domain_block: Gỡ máy chủ chặn destroy_domain_block: Bỏ chặn máy chủ
destroy_email_domain_block: Gỡ email đã chặn destroy_email_domain_block: Bỏ chặn email
destroy_ip_block: Bỏ chặn IP destroy_ip_block: Bỏ chặn IP
destroy_status: Xóa tút destroy_status: Xóa tút
disable_2fa_user: Vô hiệu hóa xác thực hai bước disable_2fa_user: Xóa xác thực hai bước
disable_custom_emoji: Vô hiệu hóa Emoji disable_custom_emoji: Vô hiệu hóa Emoji
disable_user: Tạm khóa người dùng disable_user: Tạm khóa người dùng
enable_custom_emoji: Cho phép Emoji enable_custom_emoji: Cho phép Emoji
enable_user: Mở khóa người dùng enable_user: Mở khóa
memorialize_account: Tài khoản tưởng niệm memorialize_account: Tài khoản tưởng niệm
promote_user: Chỉ định chức vụ promote_user: Chỉ định chức vụ
remove_avatar_user: Xóa ảnh đại diện remove_avatar_user: Xóa ảnh đại diện
@ -245,18 +245,18 @@ vi:
reset_password_user: Đặt lại mật khẩu reset_password_user: Đặt lại mật khẩu
resolve_report: Xử lý báo cáo resolve_report: Xử lý báo cáo
sensitive_account: Đánh dấu nhạy cảm cho tài khoản sensitive_account: Đánh dấu nhạy cảm cho tài khoản
silence_account: Tài khoản bị ẩn silence_account: n
suspend_account: Vô hiệu hóa người dùng suspend_account: Vô hiệu hóa
unassigned_report: Báo cáo chưa xử lý unassigned_report: Báo cáo chưa xử lý
unsensitive_account: Đánh dấu tài khoản là bình thường unsensitive_account: Đánh dấu bình thường
unsilence_account: Tài khoản bỏ ẩn unsilence_account: Bỏ ẩn
unsuspend_account: Ngừng vô hiệu hóa unsuspend_account: Bỏ vô hiệu hóa
update_announcement: Cập nhật thông báo update_announcement: Cập nhật thông báo
update_custom_emoji: Cập nhật Emoji mới update_custom_emoji: Cập nhật Emoji mới
update_domain_block: Cập nhật máy chủ chặn update_domain_block: Cập nhật máy chủ chặn
update_status: Cập nhật tút update_status: Cập nhật tút
actions: actions:
assigned_to_self_report: "%{name} đã xử lý báo cáo được giao %{target}" assigned_to_self_report: "%{name} tự xử lý báo cáo %{target}"
change_email_user: "%{name} đã thay đổi địa chỉ email cho %{target}" change_email_user: "%{name} đã thay đổi địa chỉ email cho %{target}"
confirm_user: "%{name} xác nhận địa chỉ email của người dùng %{target}" confirm_user: "%{name} xác nhận địa chỉ email của người dùng %{target}"
create_account_warning: "%{name} đã gửi cảnh cáo %{target}" create_account_warning: "%{name} đã gửi cảnh cáo %{target}"
@ -274,9 +274,9 @@ vi:
destroy_email_domain_block: "%{name} bỏ chặn tên miền email %{target}" destroy_email_domain_block: "%{name} bỏ chặn tên miền email %{target}"
destroy_ip_block: "%{name} bỏ chặn IP %{target}" destroy_ip_block: "%{name} bỏ chặn IP %{target}"
destroy_status: "%{name} đã xóa tút của %{target}" destroy_status: "%{name} đã xóa tút của %{target}"
disable_2fa_user: "%{name} đã vô hiệu hóa xác thực hai yếu tố của %{target}" disable_2fa_user: "%{name} đã vô hiệu hóa xác thực hai bước của %{target}"
disable_custom_emoji: "%{name} đã ẩn emoji %{target}" disable_custom_emoji: "%{name} đã ẩn emoji %{target}"
disable_user: "%{name} tạm khóa %{target}" disable_user: "%{name} vô hiệu hóa đăng nhập %{target}"
enable_custom_emoji: "%{name} cho phép Emoji %{target}" enable_custom_emoji: "%{name} cho phép Emoji %{target}"
enable_user: "%{name} mở khóa cho người dùng %{target}" enable_user: "%{name} mở khóa cho người dùng %{target}"
memorialize_account: "%{name} đã biến tài khoản %{target} thành một trang tưởng niệm" memorialize_account: "%{name} đã biến tài khoản %{target} thành một trang tưởng niệm"
@ -605,7 +605,7 @@ vi:
title: Mô tả máy chủ title: Mô tả máy chủ
site_description_extended: site_description_extended:
desc_html: Bạn có thể tạo thêm các mục như quy định chung, hướng dẫn và những thứ khác liên quan tới máy chủ của bạn. Dùng thẻ HTML desc_html: Bạn có thể tạo thêm các mục như quy định chung, hướng dẫn và những thứ khác liên quan tới máy chủ của bạn. Dùng thẻ HTML
title: Thông tin mở rộng tùy chỉnh title: Thông tin bổ sung
site_short_description: site_short_description:
desc_html: Hiển thị trong thanh bên và thẻ meta. Mô tả Mastodon là gì và điều gì làm cho máy chủ này trở nên đặc biệt trong một đoạn văn duy nhất. desc_html: Hiển thị trong thanh bên và thẻ meta. Mô tả Mastodon là gì và điều gì làm cho máy chủ này trở nên đặc biệt trong một đoạn văn duy nhất.
title: Mô tả máy chủ ngắn title: Mô tả máy chủ ngắn
@ -1212,7 +1212,7 @@ vi:
show_more: Đọc thêm show_more: Đọc thêm
show_newer: Mới hơn show_newer: Mới hơn
show_older: Cũ hơn show_older: Cũ hơn
show_thread: Xem thêm show_thread: Toàn bộ chủ đề
sign_in_to_participate: Đăng nhập để trả lời chủ đề này sign_in_to_participate: Đăng nhập để trả lời chủ đề này
title: '%{name}: "%{quote}"' title: '%{name}: "%{quote}"'
visibilities: visibilities:

@ -148,7 +148,7 @@ zh-CN:
pending: 待审核 pending: 待审核
silenced: 已隐藏 silenced: 已隐藏
suspended: 已封禁 suspended: 已封禁
title: 帐户状态 title: 管理
moderation_notes: 管理员备注 moderation_notes: 管理员备注
most_recent_activity: 最后一次活跃的时间 most_recent_activity: 最后一次活跃的时间
most_recent_ip: 最后一次活跃的 IP 地址 most_recent_ip: 最后一次活跃的 IP 地址

@ -398,6 +398,8 @@ zh-HK:
silence: 自動靜音 silence: 自動靜音
suspend: 自動刪除 suspend: 自動刪除
title: 新增域名阻隔 title: 新增域名阻隔
obfuscate: 混淆域名名稱
obfuscate_hint: 如果已經啟用了網域廣告列表限制,在列表部份混淆網域名稱
private_comment: 私人留言 private_comment: 私人留言
private_comment_hint: 請提供更多有關此域名限制的資訊以供管理員作內部參考。 private_comment_hint: 請提供更多有關此域名限制的資訊以供管理員作內部參考。
public_comment: 公開留言 public_comment: 公開留言
@ -556,6 +558,7 @@ zh-HK:
domain_blocks_rationale: domain_blocks_rationale:
title: 顯示原因予 title: 顯示原因予
enable_bootstrap_timeline_accounts: enable_bootstrap_timeline_accounts:
desc_html: 自動為新用戶追隨預設的帳號,為他們的首頁動態增加一點色彩
title: 啟用「新使用者預設關注」功能 title: 啟用「新使用者預設關注」功能
hero: hero:
desc_html: 在首頁顯示。推薦最小 600x100px。如果留空就會默認為服務站縮圖 desc_html: 在首頁顯示。推薦最小 600x100px。如果留空就會默認為服務站縮圖
@ -912,6 +915,8 @@ zh-HK:
status: 確認狀態 status: 確認狀態
view_proof: 查看證明 view_proof: 查看證明
imports: imports:
errors:
over_rows_processing_limit: 包含超過 %{count} 行
modes: modes:
merge: 合併 merge: 合併
merge_long: 留下舊有記錄並添加新的資訊 merge_long: 留下舊有記錄並添加新的資訊

@ -2,19 +2,19 @@
const { basename, dirname, extname, join, resolve } = require('path'); const { basename, dirname, extname, join, resolve } = require('path');
const { env } = require('process'); const { env } = require('process');
const { safeLoad } = require('js-yaml'); const { load } = require('js-yaml');
const { lstatSync, readFileSync } = require('fs'); const { lstatSync, readFileSync } = require('fs');
const glob = require('glob'); const glob = require('glob');
const configPath = resolve('config', 'webpacker.yml'); const configPath = resolve('config', 'webpacker.yml');
const settings = safeLoad(readFileSync(configPath), 'utf8')[env.RAILS_ENV || env.NODE_ENV]; const settings = load(readFileSync(configPath), 'utf8')[env.RAILS_ENV || env.NODE_ENV];
const flavourFiles = glob.sync('app/javascript/flavours/*/theme.yml'); const flavourFiles = glob.sync('app/javascript/flavours/*/theme.yml');
const skinFiles = glob.sync('app/javascript/skins/*/*'); const skinFiles = glob.sync('app/javascript/skins/*/*');
const flavours = {}; const flavours = {};
const core = function () { const core = function () {
const coreFile = resolve('app', 'javascript', 'core', 'theme.yml'); const coreFile = resolve('app', 'javascript', 'core', 'theme.yml');
const data = safeLoad(readFileSync(coreFile), 'utf8'); const data = load(readFileSync(coreFile), 'utf8');
if (!data.pack_directory) { if (!data.pack_directory) {
data.pack_directory = dirname(coreFile); data.pack_directory = dirname(coreFile);
} }
@ -23,7 +23,7 @@ const core = function () {
for (let i = 0; i < flavourFiles.length; i++) { for (let i = 0; i < flavourFiles.length; i++) {
const flavourFile = flavourFiles[i]; const flavourFile = flavourFiles[i];
const data = safeLoad(readFileSync(flavourFile), 'utf8'); const data = load(readFileSync(flavourFile), 'utf8');
data.name = basename(dirname(flavourFile)); data.name = basename(dirname(flavourFile));
data.skin = {}; data.skin = {};
if (!data.pack_directory) { if (!data.pack_directory) {

4
dist/nginx.conf vendored

@ -73,7 +73,7 @@ server {
proxy_set_header Host $host; proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https; proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Proxy ""; proxy_set_header Proxy "";
proxy_pass_header Server; proxy_pass_header Server;
@ -98,7 +98,7 @@ server {
proxy_set_header Host $host; proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https; proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Proxy ""; proxy_set_header Proxy "";
proxy_pass http://streaming; proxy_pass http://streaming;

@ -384,7 +384,7 @@ module Mastodon
end end
processed, = parallelize_with_progress(Account.local.without_suspended) do |account| processed, = parallelize_with_progress(Account.local.without_suspended) do |account|
FollowService.new.call(account, target_account) FollowService.new.call(account, target_account, bypass_limit: true)
end end
say("OK, followed target from #{processed} accounts", :green) say("OK, followed target from #{processed} accounts", :green)

@ -43,7 +43,12 @@ module Mastodon
tar.each do |entry| tar.each do |entry|
next unless entry.file? && entry.full_name.end_with?('.png') next unless entry.file? && entry.full_name.end_with?('.png')
shortcode = [options[:prefix], File.basename(entry.full_name, '.*'), options[:suffix]].compact.join filename = File.basename(entry.full_name, '.*')
# Skip macOS shadow files
next if filename.start_with?('._')
shortcode = [options[:prefix], filename, options[:suffix]].compact.join
custom_emoji = CustomEmoji.local.find_by(shortcode: shortcode) custom_emoji = CustomEmoji.local.find_by(shortcode: shortcode)
if custom_emoji && !options[:overwrite] if custom_emoji && !options[:overwrite]

@ -17,7 +17,7 @@ module Mastodon
end end
def flags def flags
'rc3' ''
end end
def suffix def suffix

@ -60,24 +60,24 @@
}, },
"private": true, "private": true,
"dependencies": { "dependencies": {
"@babel/core": "^7.12.7", "@babel/core": "^7.12.10",
"@babel/plugin-proposal-class-properties": "^7.8.3", "@babel/plugin-proposal-class-properties": "^7.8.3",
"@babel/plugin-proposal-decorators": "^7.12.1", "@babel/plugin-proposal-decorators": "^7.12.12",
"@babel/plugin-transform-react-inline-elements": "^7.12.1", "@babel/plugin-transform-react-inline-elements": "^7.12.1",
"@babel/plugin-transform-runtime": "^7.12.1", "@babel/plugin-transform-runtime": "^7.12.10",
"@babel/preset-env": "^7.12.7", "@babel/preset-env": "^7.12.11",
"@babel/preset-react": "^7.12.7", "@babel/preset-react": "^7.12.10",
"@babel/runtime": "^7.12.5", "@babel/runtime": "^7.12.5",
"@clusterws/cws": "^3.0.0", "@clusterws/cws": "^3.0.0",
"@gamestdio/websocket": "^0.3.2", "@gamestdio/websocket": "^0.3.2",
"@github/webauthn-json": "^0.5.7", "@github/webauthn-json": "^0.5.7",
"@rails/ujs": "^6.0.3", "@rails/ujs": "^6.1.0",
"array-includes": "^3.1.1", "array-includes": "^3.1.2",
"atrament": "0.2.4", "atrament": "0.2.4",
"arrow-key-navigation": "^1.2.0", "arrow-key-navigation": "^1.2.0",
"autoprefixer": "^9.8.6", "autoprefixer": "^9.8.6",
"axios": "^0.21.0", "axios": "^0.21.1",
"babel-loader": "^8.2.1", "babel-loader": "^8.2.2",
"babel-plugin-lodash": "^3.3.4", "babel-plugin-lodash": "^3.3.4",
"babel-plugin-preval": "^5.0.0", "babel-plugin-preval": "^5.0.0",
"babel-plugin-react-intl": "^6.2.0", "babel-plugin-react-intl": "^6.2.0",
@ -85,12 +85,12 @@
"babel-runtime": "^6.26.0", "babel-runtime": "^6.26.0",
"blurhash": "^1.1.3", "blurhash": "^1.1.3",
"classnames": "^2.2.5", "classnames": "^2.2.5",
"color-blend": "^3.0.0", "color-blend": "^3.0.1",
"compression-webpack-plugin": "^6.1.1", "compression-webpack-plugin": "^6.1.1",
"cross-env": "^7.0.2", "cross-env": "^7.0.3",
"css-loader": "^5.0.1", "css-loader": "^5.0.1",
"cssnano": "^4.1.10", "cssnano": "^4.1.10",
"detect-passive-events": "^2.0.1", "detect-passive-events": "^2.0.2",
"dotenv": "^8.2.0", "dotenv": "^8.2.0",
"emoji-mart": "Gargron/emoji-mart#build", "emoji-mart": "Gargron/emoji-mart#build",
"es6-symbol": "^3.1.3", "es6-symbol": "^3.1.3",
@ -105,21 +105,21 @@
"http-link-header": "^1.0.3", "http-link-header": "^1.0.3",
"immutable": "^3.8.2", "immutable": "^3.8.2",
"imports-loader": "^1.2.0", "imports-loader": "^1.2.0",
"intersection-observer": "^0.11.0", "intersection-observer": "^0.12.0",
"intl": "^1.2.5", "intl": "^1.2.5",
"intl-messageformat": "^2.2.0", "intl-messageformat": "^2.2.0",
"intl-relativeformat": "^6.4.3", "intl-relativeformat": "^6.4.3",
"is-nan": "^1.3.0", "is-nan": "^1.3.2",
"js-yaml": "^3.13.1", "js-yaml": "^4.0.0",
"lodash": "^4.17.19", "lodash": "^4.17.19",
"mark-loader": "^0.1.6", "mark-loader": "^0.1.6",
"marky": "^1.2.1", "marky": "^1.2.1",
"mini-css-extract-plugin": "^1.3.1", "mini-css-extract-plugin": "^1.3.3",
"mkdirp": "^1.0.4", "mkdirp": "^1.0.4",
"npmlog": "^4.1.2", "npmlog": "^4.1.2",
"object-assign": "^4.1.1", "object-assign": "^4.1.1",
"object-fit-images": "^3.2.3", "object-fit-images": "^3.2.3",
"object.values": "^1.1.1", "object.values": "^1.1.2",
"offline-plugin": "^5.0.7", "offline-plugin": "^5.0.7",
"path-complete-extname": "^1.0.0", "path-complete-extname": "^1.0.0",
"pg": "^6.4.0", "pg": "^6.4.0",
@ -137,12 +137,12 @@
"react-masonry-infinite": "^1.2.2", "react-masonry-infinite": "^1.2.2",
"react-motion": "^0.5.2", "react-motion": "^0.5.2",
"react-notification": "^6.8.5", "react-notification": "^6.8.5",
"react-overlays": "^0.9.2", "react-overlays": "^0.9.3",
"react-redux": "^7.2.2", "react-redux": "^7.2.2",
"react-redux-loading-bar": "^4.0.8", "react-redux-loading-bar": "^4.0.8",
"react-router-dom": "^4.1.1", "react-router-dom": "^4.1.1",
"react-router-scroll-4": "^1.0.0-beta.1", "react-router-scroll-4": "^1.0.0-beta.1",
"react-select": "^3.1.0", "react-select": "^3.1.1",
"react-sparklines": "^1.7.0", "react-sparklines": "^1.7.0",
"react-swipeable-views": "^0.13.9", "react-swipeable-views": "^0.13.9",
"react-textarea-autosize": "^8.3.0", "react-textarea-autosize": "^8.3.0",
@ -156,7 +156,7 @@
"requestidlecallback": "^0.3.0", "requestidlecallback": "^0.3.0",
"reselect": "^4.0.0", "reselect": "^4.0.0",
"rimraf": "^3.0.2", "rimraf": "^3.0.2",
"sass": "^1.29.0", "sass": "^1.32.0",
"sass-loader": "^10.1.0", "sass-loader": "^10.1.0",
"stacktrace-js": "^2.0.2", "stacktrace-js": "^2.0.2",
"stringz": "^2.1.0", "stringz": "^2.1.0",
@ -168,28 +168,28 @@
"uuid": "^8.3.1", "uuid": "^8.3.1",
"webpack": "^4.44.2", "webpack": "^4.44.2",
"webpack-assets-manifest": "^3.1.1", "webpack-assets-manifest": "^3.1.1",
"webpack-bundle-analyzer": "^4.1.0", "webpack-bundle-analyzer": "^4.3.0",
"webpack-cli": "^3.3.12", "webpack-cli": "^3.3.12",
"webpack-merge": "^5.4.0", "webpack-merge": "^5.7.3",
"wicg-inert": "^3.1.0" "wicg-inert": "^3.1.0"
}, },
"devDependencies": { "devDependencies": {
"@testing-library/jest-dom": "^5.11.6", "@testing-library/jest-dom": "^5.11.8",
"@testing-library/react": "^11.2.2", "@testing-library/react": "^11.2.2",
"babel-eslint": "^10.1.0", "babel-eslint": "^10.1.0",
"babel-jest": "^26.6.3", "babel-jest": "^26.6.3",
"eslint": "^7.14.0", "eslint": "^7.17.0",
"eslint-plugin-import": "~2.22.1", "eslint-plugin-import": "~2.22.1",
"eslint-plugin-jsx-a11y": "~6.4.1", "eslint-plugin-jsx-a11y": "~6.4.1",
"eslint-plugin-promise": "~4.2.1", "eslint-plugin-promise": "~4.2.1",
"eslint-plugin-react": "~7.21.5", "eslint-plugin-react": "~7.22.0",
"jest": "^26.6.3", "jest": "^26.6.3",
"raf": "^3.4.1", "raf": "^3.4.1",
"react-intl-translations-manager": "^5.0.3", "react-intl-translations-manager": "^5.0.3",
"react-test-renderer": "^16.14.0", "react-test-renderer": "^16.14.0",
"sass-lint": "^1.13.1", "sass-lint": "^1.13.1",
"webpack-dev-server": "^3.11.0", "webpack-dev-server": "^3.11.1",
"yargs": "^16.1.1" "yargs": "^16.2.0"
}, },
"resolutions": { "resolutions": {
"kind-of": "^6.0.3" "kind-of": "^6.0.3"

@ -23,8 +23,8 @@ describe RefollowWorker do
result = subject.perform(account.id) result = subject.perform(account.id)
expect(result).to be_nil expect(result).to be_nil
expect(service).to have_received(:call).with(alice, account, reblogs: true, notify: false) expect(service).to have_received(:call).with(alice, account, reblogs: true, notify: false, bypass_limit: true)
expect(service).to have_received(:call).with(bob, account, reblogs: false, notify: false) expect(service).to have_received(:call).with(bob, account, reblogs: false, notify: false, bypass_limit: true)
end end
end end
end end

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save