Merge pull request #1009 from cheeaun/main

Update from main
This commit is contained in:
Chee Aun 2025-01-26 21:04:10 +08:00 committed by GitHub
commit 24f03f5130
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
26 changed files with 1126 additions and 1054 deletions

View file

@ -1,9 +1,13 @@
name: Pull Request to `main` from `production` name: Pull Request into `production` from `main`
on: on:
push: push:
branches: branches:
- main - main
pull_request:
types: [closed]
branches:
- main
jobs: jobs:
auto-pull-request: auto-pull-request:

View file

@ -97,7 +97,7 @@ Everything is designed and engineered following my taste and vision. This is a p
## Development ## Development
Prerequisites: Node.js 18+ Prerequisites: Node.js 20+
- `npm install` - Install dependencies - `npm install` - Install dependencies
- `npm run dev` - Start development server and `messages:extract` (`clean` + ``watch`) in parallel - `npm run dev` - Start development server and `messages:extract` (`clean` + ``watch`) in parallel
@ -233,6 +233,11 @@ Available variables:
- `PHANPY_DEFAULT_LANG` (optional): - `PHANPY_DEFAULT_LANG` (optional):
- Default language is English (`en`) if not specified. - Default language is English (`en`) if not specified.
- Fallback language after multiple detection methods (`lang` query parameter, `lang` key in `localStorage` and `navigator.language`) - Fallback language after multiple detection methods (`lang` query parameter, `lang` key in `localStorage` and `navigator.language`)
- `PHANPY_REFERRER_POLICY` (optional, default: `origin`):
- Referrer policy for the site. See [MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy).
- This is applied with the `<meta>` tag on the client-side.
- The policy can also be set with `Referrer-Policy` header configured on the server-side (not this variable).
- Note that since Phanpy uses hash-based URLs, the referrer does not include the hash part.
- `PHANPY_LINGVA_INSTANCES` (optional, space-separated list, default: `lingva.phanpy.social [...hard-coded list of fallback instances]`): - `PHANPY_LINGVA_INSTANCES` (optional, space-separated list, default: `lingva.phanpy.social [...hard-coded list of fallback instances]`):
- Specify a space-separated list of instances. First will be used as default before falling back to the subsequent instances. If there's only 1 instance, means no fallback. - Specify a space-separated list of instances. First will be used as default before falling back to the subsequent instances. If there's only 1 instance, means no fallback.
- May specify a self-hosted Lingva instance, powered by either [lingva-translate](https://github.com/thedaviddelta/lingva-translate) or [lingva-api](https://github.com/cheeaun/lingva-api) - May specify a self-hosted Lingva instance, powered by either [lingva-translate](https://github.com/thedaviddelta/lingva-translate) or [lingva-api](https://github.com/cheeaun/lingva-api)
@ -313,6 +318,7 @@ Costs involved in running and developing this web app:
- <img src="https://crowdin-static.downloads.crowdin.com/avatar/12618120/medium/ccb11bd042bbf4c7189033f7af2dbd32_default.png" alt="" width="16" height="16" /> drydenwu (Chinese Traditional) - <img src="https://crowdin-static.downloads.crowdin.com/avatar/12618120/medium/ccb11bd042bbf4c7189033f7af2dbd32_default.png" alt="" width="16" height="16" /> drydenwu (Chinese Traditional)
- <img src="https://crowdin-static.downloads.crowdin.com/avatar/13557465/medium/8feebf3677fa80c01e8c54c4fbe097e0_default.png" alt="" width="16" height="16" /> elissarc (French) - <img src="https://crowdin-static.downloads.crowdin.com/avatar/13557465/medium/8feebf3677fa80c01e8c54c4fbe097e0_default.png" alt="" width="16" height="16" /> elissarc (French)
- <img src="https://crowdin-static.downloads.crowdin.com/avatar/16528627/medium/9036f6eced0257f4e1ea4c5bd499de2d_default.png" alt="" width="16" height="16" /> ElPamplina (Spanish) - <img src="https://crowdin-static.downloads.crowdin.com/avatar/16528627/medium/9036f6eced0257f4e1ea4c5bd499de2d_default.png" alt="" width="16" height="16" /> ElPamplina (Spanish)
- <img src="https://crowdin-static.downloads.crowdin.com/avatar/15592209/medium/28f10212dce24e74c25e27ea6d0e9126.png" alt="" width="16" height="16" /> filipesmedeiros (Portuguese)
- <img src="https://crowdin-static.downloads.crowdin.com/avatar/14277386/medium/29b30d2c73a214000e3941c9978f49e4_default.png" alt="" width="16" height="16" /> Fitik (Esperanto, Hebrew) - <img src="https://crowdin-static.downloads.crowdin.com/avatar/14277386/medium/29b30d2c73a214000e3941c9978f49e4_default.png" alt="" width="16" height="16" /> Fitik (Esperanto, Hebrew)
- <img src="https://crowdin-static.downloads.crowdin.com/avatar/14444512/medium/99d0e7a3076deccbdfe0aa0b0612308c.jpeg" alt="" width="16" height="16" /> Freeesia (Japanese) - <img src="https://crowdin-static.downloads.crowdin.com/avatar/14444512/medium/99d0e7a3076deccbdfe0aa0b0612308c.jpeg" alt="" width="16" height="16" /> Freeesia (Japanese)
- <img src="https://crowdin-static.downloads.crowdin.com/avatar/12617257/medium/7a0122f352a94d95be10780bb83f63ef.jpg" alt="" width="16" height="16" /> ghose (Galician) - <img src="https://crowdin-static.downloads.crowdin.com/avatar/12617257/medium/7a0122f352a94d95be10780bb83f63ef.jpg" alt="" width="16" height="16" /> ghose (Galician)
@ -328,6 +334,7 @@ Costs involved in running and developing this web app:
- <img src="https://crowdin-static.downloads.crowdin.com/avatar/16640089/medium/4b7d8d275d7a7bff564adde51e09b473_default.png" alt="" width="16" height="16" /> LukeHong (Chinese Traditional) - <img src="https://crowdin-static.downloads.crowdin.com/avatar/16640089/medium/4b7d8d275d7a7bff564adde51e09b473_default.png" alt="" width="16" height="16" /> LukeHong (Chinese Traditional)
- <img src="https://crowdin-static.downloads.crowdin.com/avatar/12822971/medium/4ecbe6d1248536084902925beb0b63e4.png" alt="" width="16" height="16" /> Mannivu (Italian) - <img src="https://crowdin-static.downloads.crowdin.com/avatar/12822971/medium/4ecbe6d1248536084902925beb0b63e4.png" alt="" width="16" height="16" /> Mannivu (Italian)
- <img src="https://crowdin-static.downloads.crowdin.com/avatar/16537713/medium/825f0bf1a14fc545a76891a52839d86e_default.png" alt="" width="16" height="16" /> marcin.kozinski (Polish) - <img src="https://crowdin-static.downloads.crowdin.com/avatar/16537713/medium/825f0bf1a14fc545a76891a52839d86e_default.png" alt="" width="16" height="16" /> marcin.kozinski (Polish)
- <img src="https://crowdin-static.downloads.crowdin.com/avatar/16812323/medium/72bffbdf4a331845f23400eafa0b3d48.jpeg" alt="" width="16" height="16" /> martinmodrak (Czech)
- <img src="https://crowdin-static.downloads.crowdin.com/avatar/13521465/medium/76cb9aa6b753ce900a70478bff7fcea0.png" alt="" width="16" height="16" /> mkljczkk (Polish) - <img src="https://crowdin-static.downloads.crowdin.com/avatar/13521465/medium/76cb9aa6b753ce900a70478bff7fcea0.png" alt="" width="16" height="16" /> mkljczkk (Polish)
- <img src="https://crowdin-static.downloads.crowdin.com/avatar/12882812/medium/77744d8db46e9a3e09030e1a02b7a572.jpeg" alt="" width="16" height="16" /> mojosoeun (Korean) - <img src="https://crowdin-static.downloads.crowdin.com/avatar/12882812/medium/77744d8db46e9a3e09030e1a02b7a572.jpeg" alt="" width="16" height="16" /> mojosoeun (Korean)
- <img src="https://crowdin-static.downloads.crowdin.com/avatar/13613969/medium/c7834ddc0ada84a79671697a944bb274.png" alt="" width="16" height="16" /> moreal (Korean) - <img src="https://crowdin-static.downloads.crowdin.com/avatar/13613969/medium/c7834ddc0ada84a79671697a944bb274.png" alt="" width="16" height="16" /> moreal (Korean)
@ -348,9 +355,11 @@ Costs involved in running and developing this web app:
- <img src="https://crowdin-static.downloads.crowdin.com/avatar/14565190/medium/79100599131b7776e9803e4b696915a3_default.png" alt="" width="16" height="16" /> Sky_NiniKo (French) - <img src="https://crowdin-static.downloads.crowdin.com/avatar/14565190/medium/79100599131b7776e9803e4b696915a3_default.png" alt="" width="16" height="16" /> Sky_NiniKo (French)
- <img src="https://crowdin-static.downloads.crowdin.com/avatar/13143526/medium/30871da23d51d7e41bb02f3c92d7f104.png" alt="" width="16" height="16" /> Steffo99 (Italian) - <img src="https://crowdin-static.downloads.crowdin.com/avatar/13143526/medium/30871da23d51d7e41bb02f3c92d7f104.png" alt="" width="16" height="16" /> Steffo99 (Italian)
- <img src="https://crowdin-static.downloads.crowdin.com/avatar/16532441/medium/1a47e8d80c95636e02d2260f6e233ca5.png" alt="" width="16" height="16" /> Su5hicz (Czech) - <img src="https://crowdin-static.downloads.crowdin.com/avatar/16532441/medium/1a47e8d80c95636e02d2260f6e233ca5.png" alt="" width="16" height="16" /> Su5hicz (Czech)
- <img src="https://crowdin-static.downloads.crowdin.com/avatar/12579488/medium/699394d1acfe986a31532007534c7656.jpg" alt="" width="16" height="16" /> svetlemodry (Czech)
- <img src="https://crowdin-static.downloads.crowdin.com/avatar/16530049/medium/683f3581620c6b4a5c753b416ed695a7.jpeg" alt="" width="16" height="16" /> tferrermo (Spanish) - <img src="https://crowdin-static.downloads.crowdin.com/avatar/16530049/medium/683f3581620c6b4a5c753b416ed695a7.jpeg" alt="" width="16" height="16" /> tferrermo (Spanish)
- <img src="https://crowdin-static.downloads.crowdin.com/avatar/15752199/medium/7e9efd828c4691368d063b19d19eb894.png" alt="" width="16" height="16" /> tkbremnes (Norwegian Bokmal) - <img src="https://crowdin-static.downloads.crowdin.com/avatar/15752199/medium/7e9efd828c4691368d063b19d19eb894.png" alt="" width="16" height="16" /> tkbremnes (Norwegian Bokmal)
- <img src="https://crowdin-static.downloads.crowdin.com/avatar/16527851/medium/649e5a9a8a8cc61ced670d89e9cca082.png" alt="" width="16" height="16" /> tux93 (German) - <img src="https://crowdin-static.downloads.crowdin.com/avatar/16527851/medium/649e5a9a8a8cc61ced670d89e9cca082.png" alt="" width="16" height="16" /> tux93 (German)
- <img src="https://crowdin-static.downloads.crowdin.com/avatar/16791511/medium/321c72613cd27efc3005e7c3bf383578.jpeg" alt="" width="16" height="16" /> uzaylul (Turkish)
- <img src="https://crowdin-static.downloads.crowdin.com/avatar/14427566/medium/ab733b5044c21867fc5a9d1b22cd2c03.png" alt="" width="16" height="16" /> Vac31. (Lithuanian) - <img src="https://crowdin-static.downloads.crowdin.com/avatar/14427566/medium/ab733b5044c21867fc5a9d1b22cd2c03.png" alt="" width="16" height="16" /> Vac31. (Lithuanian)
- <img src="https://crowdin-static.downloads.crowdin.com/avatar/16026914/medium/e3ca187f354a298ef0c9d02a0ed17be7.jpg" alt="" width="16" height="16" /> valtlai (Finnish) - <img src="https://crowdin-static.downloads.crowdin.com/avatar/16026914/medium/e3ca187f354a298ef0c9d02a0ed17be7.jpg" alt="" width="16" height="16" /> valtlai (Finnish)
- <img src="https://crowdin-static.downloads.crowdin.com/avatar/16608515/medium/85506c21dce8df07843ca11908ee3951.jpeg" alt="" width="16" height="16" /> vasiriri (Polish) - <img src="https://crowdin-static.downloads.crowdin.com/avatar/16608515/medium/85506c21dce8df07843ca11908ee3951.jpeg" alt="" width="16" height="16" /> vasiriri (Polish)

607
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -16,8 +16,8 @@
"readme:i18n-volunteers": "node scripts/update-i18n-volunteers-readme.js" "readme:i18n-volunteers": "node scripts/update-i18n-volunteers-readme.js"
}, },
"dependencies": { "dependencies": {
"@formatjs/intl-localematcher": "~0.5.9", "@formatjs/intl-localematcher": "~0.5.10",
"@formatjs/intl-segmenter": "~11.7.7", "@formatjs/intl-segmenter": "~11.7.8",
"@formkit/auto-animate": "~0.8.2", "@formkit/auto-animate": "~0.8.2",
"@github/text-expander-element": "~2.8.0", "@github/text-expander-element": "~2.8.0",
"@iconify-icons/mingcute": "~1.2.9", "@iconify-icons/mingcute": "~1.2.9",
@ -25,11 +25,11 @@
"@lingui/detect-locale": "~5.1.2", "@lingui/detect-locale": "~5.1.2",
"@lingui/macro": "~5.1.2", "@lingui/macro": "~5.1.2",
"@lingui/react": "~5.1.2", "@lingui/react": "~5.1.2",
"@szhsin/react-menu": "~4.2.3", "@szhsin/react-menu": "~4.3.0",
"chroma-js": "~3.1.2", "chroma-js": "~3.1.2",
"compare-versions": "~6.1.1", "compare-versions": "~6.1.1",
"fast-blurhash": "~1.1.4", "fast-blurhash": "~1.1.4",
"fast-equals": "~5.0.1", "fast-equals": "~5.2.2",
"fuse.js": "~7.0.0", "fuse.js": "~7.0.0",
"html-prettify": "~1.0.7", "html-prettify": "~1.0.7",
"idb-keyval": "~6.2.1", "idb-keyval": "~6.2.1",
@ -37,14 +37,14 @@
"js-cookie": "~3.0.5", "js-cookie": "~3.0.5",
"just-debounce-it": "~3.2.0", "just-debounce-it": "~3.2.0",
"lz-string": "~1.5.0", "lz-string": "~1.5.0",
"masto": "~6.10.1", "masto": "~6.10.3",
"moize": "~6.1.6", "moize": "~6.1.6",
"p-retry": "~6.2.1", "p-retry": "~6.2.1",
"p-throttle": "~7.0.0", "p-throttle": "~7.0.0",
"preact": "~10.25.3", "preact": "~10.25.4",
"punycode": "~2.3.1", "punycode": "~2.3.1",
"react-hotkeys-hook": "~4.6.1", "react-hotkeys-hook": "~4.6.1",
"react-intersection-observer": "~9.14.0", "react-intersection-observer": "~9.15.1",
"react-quick-pinch-zoom": "~5.1.0", "react-quick-pinch-zoom": "~5.1.0",
"react-router-dom": "6.6.2", "react-router-dom": "6.6.2",
"string-length": "6.0.0", "string-length": "6.0.0",
@ -58,18 +58,18 @@
"valtio": "2.1.2" "valtio": "2.1.2"
}, },
"devDependencies": { "devDependencies": {
"@ianvs/prettier-plugin-sort-imports": "~4.4.0", "@ianvs/prettier-plugin-sort-imports": "~4.4.1",
"@lingui/cli": "~5.1.2", "@lingui/cli": "~5.1.2",
"@lingui/vite-plugin": "~5.1.2", "@lingui/vite-plugin": "~5.1.2",
"@preact/preset-vite": "~2.9.3", "@preact/preset-vite": "~2.10.0",
"babel-plugin-macros": "~3.1.0", "babel-plugin-macros": "~3.1.0",
"postcss": "~8.4.49", "postcss": "~8.5.1",
"postcss-dark-theme-class": "~1.3.0", "postcss-dark-theme-class": "~1.3.0",
"postcss-preset-env": "~10.1.2", "postcss-preset-env": "~10.1.3",
"prettier": "3.4.2", "prettier": "3.4.2",
"sonda": "~0.6.2", "sonda": "~0.7.1",
"twitter-text": "~3.1.0", "twitter-text": "~3.1.0",
"vite": "~6.0.5", "vite": "~6.0.11",
"vite-plugin-generate-file": "~0.2.0", "vite-plugin-generate-file": "~0.2.0",
"vite-plugin-html-config": "~2.0.2", "vite-plugin-html-config": "~2.0.2",
"vite-plugin-pwa": "~0.21.1", "vite-plugin-pwa": "~0.21.1",

View file

@ -459,7 +459,9 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) {
transparent var(--curves-radius) transparent var(--curves-radius)
); );
background-size: var(--curves-radius); background-size: var(--curves-radius);
background-position: top var(--backward), bottom var(--forward); background-position:
top var(--backward),
bottom var(--forward);
} }
} }
.timeline.contextual > li { .timeline.contextual > li {
@ -519,7 +521,8 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) {
} }
.timeline.contextual .replies[data-scroll-left]:not([data-scroll-left='0']) { .timeline.contextual .replies[data-scroll-left]:not([data-scroll-left='0']) {
background-color: var(--bg-color); background-color: var(--bg-color);
box-shadow: inset 0 -3px var(--comment-line-color), box-shadow:
inset 0 -3px var(--comment-line-color),
inset 0 3px var(--comment-line-color); inset 0 3px var(--comment-line-color);
overscroll-behavior-x: contain; overscroll-behavior-x: contain;
/* touch-action: pan-x; */ /* touch-action: pan-x; */
@ -1655,7 +1658,8 @@ body:has(.media-modal-container + .status-deck) .media-post-link {
background-color: var(--button-bg-blur-color); background-color: var(--button-bg-blur-color);
/* backdrop-filter: blur(16px); */ /* backdrop-filter: blur(16px); */
z-index: 10; z-index: 10;
box-shadow: 0 3px 8px -1px var(--drop-shadow-color), box-shadow:
0 3px 8px -1px var(--drop-shadow-color),
0 10px 36px -4px var(--button-bg-blur-color); 0 10px 36px -4px var(--button-bg-blur-color);
transition: all 0.3s ease-in-out; transition: all 0.3s ease-in-out;
} }
@ -1815,7 +1819,8 @@ body:has(.media-modal-container + .status-deck) .media-post-link {
box-shadow: none; box-shadow: none;
} }
100% { 100% {
box-shadow: 0 0 0 1px var(--outline-color), box-shadow:
0 0 0 1px var(--outline-color),
0 8px 16px -8px var(--drop-shadow-color); 0 8px 16px -8px var(--drop-shadow-color);
} }
} }
@ -1944,7 +1949,8 @@ body > .szh-menu-container {
background-color: var(--bg-color); background-color: var(--bg-color);
border: 1px solid var(--outline-stronger-color); border: 1px solid var(--outline-stronger-color);
border-radius: 8px; border-radius: 8px;
box-shadow: 0 3px 8px var(--drop-shadow-color), box-shadow:
0 3px 8px var(--drop-shadow-color),
0 6px 32px -6px var(--drop-shadow-color); 0 6px 32px -6px var(--drop-shadow-color);
text-align: start; text-align: start;
/* animation: appear-smooth 0.15s ease-in-out; */ /* animation: appear-smooth 0.15s ease-in-out; */
@ -1978,8 +1984,10 @@ body > .szh-menu-container {
} }
.szh-menu.menu-emphasized { .szh-menu.menu-emphasized {
border-color: var(--outline-hover-color); border-color: var(--outline-hover-color);
box-shadow: 0 3px 16px -3px var(--drop-shadow-color), box-shadow:
0 3px 32px var(--drop-shadow-color), 0 3px 48px var(--drop-shadow-color); 0 3px 16px -3px var(--drop-shadow-color),
0 3px 32px var(--drop-shadow-color),
0 3px 48px var(--drop-shadow-color);
background-color: var(--bg-color); background-color: var(--bg-color);
animation-duration: 0.3s; animation-duration: 0.3s;
animation-timing-function: ease-in-out; animation-timing-function: ease-in-out;
@ -1987,7 +1995,7 @@ body > .szh-menu-container {
min-width: min(12em, 90vw); min-width: min(12em, 90vw);
} }
.szh-menu .footer { .szh-menu .footer {
margin: 8px 0 -8px; margin: 8px 0 -4px;
padding: 8px 16px; padding: 8px 16px;
color: var(--text-insignificant-color); color: var(--text-insignificant-color);
font-size: 90%; font-size: 90%;
@ -2262,7 +2270,9 @@ body > .szh-menu-container {
background-color: var(--bg-blur-color); background-color: var(--bg-blur-color);
backdrop-filter: blur(8px) saturate(3); backdrop-filter: blur(8px) saturate(3);
border: var(--hairline-width) solid var(--bg-color); border: var(--hairline-width) solid var(--bg-color);
text-shadow: 0 var(--hairline-width) var(--bg-color), 0 0 8px var(--bg-color); text-shadow:
0 var(--hairline-width) var(--bg-color),
0 0 8px var(--bg-color);
} }
.glass-menu .szh-menu__item--hover { .glass-menu .szh-menu__item--hover {
/* background-color: var(--button-bg-blur-color); */ /* background-color: var(--button-bg-blur-color); */
@ -2363,14 +2373,16 @@ body > .szh-menu-container {
text-shadow: 0 1px var(--bg-color); text-shadow: 0 1px var(--bg-color);
background-color: var(--bg-color); background-color: var(--bg-color);
border: 2px solid var(--link-faded-color); border: 2px solid var(--link-faded-color);
box-shadow: 0 3px 16px var(--drop-shadow-color), box-shadow:
0 3px 16px var(--drop-shadow-color),
0 6px 16px -3px var(--drop-shadow-color); 0 6px 16px -3px var(--drop-shadow-color);
} }
:is(.shiny-pill, :root .toastify.shiny-pill):hover:not(:active) { :is(.shiny-pill, :root .toastify.shiny-pill):hover:not(:active) {
color: var(--text-color); color: var(--text-color);
border-color: var(--link-color); border-color: var(--link-color);
filter: none !important; filter: none !important;
box-shadow: 0 3px 16px var(--drop-shadow-color), box-shadow:
0 3px 16px var(--drop-shadow-color),
0 6px 16px -3px var(--drop-shadow-color), 0 6px 16px -3px var(--drop-shadow-color),
0 6px 16px var(--drop-shadow-color); 0 6px 16px var(--drop-shadow-color);
} }
@ -2386,7 +2398,8 @@ body > .szh-menu-container {
text-shadow: 0 calc(var(--hairline-width) * -1) var(--drop-shadow-color); text-shadow: 0 calc(var(--hairline-width) * -1) var(--drop-shadow-color);
background-color: var(--button-bg-color); background-color: var(--button-bg-color);
background-image: none; background-image: none;
box-shadow: 0 3px 8px -1px var(--drop-shadow-color), box-shadow:
0 3px 8px -1px var(--drop-shadow-color),
0 10px 36px -4px var(--button-bg-blur-color); 0 10px 36px -4px var(--button-bg-blur-color);
text-align: center; text-align: center;
width: fit-content; width: fit-content;
@ -2551,10 +2564,14 @@ ul.link-list li a .icon {
filter: none !important; filter: none !important;
} }
.nav-menu-button .avatar { .nav-menu-button .avatar {
box-shadow: 0 0 0 2px var(--bg-color), 0 0 0 4px var(--link-light-color) !important; box-shadow:
0 0 0 2px var(--bg-color),
0 0 0 4px var(--link-light-color) !important;
} }
.nav-menu-button:is(:hover, :focus, .active) .avatar { .nav-menu-button:is(:hover, :focus, .active) .avatar {
box-shadow: 0 0 0 2px var(--bg-color), 0 0 0 4px var(--link-color) !important; box-shadow:
0 0 0 2px var(--bg-color),
0 0 0 4px var(--link-color) !important;
} }
.nav-menu-button.with-avatar .icon { .nav-menu-button.with-avatar .icon {
position: absolute; position: absolute;
@ -2598,10 +2615,14 @@ ul.link-list li a .icon {
overscroll-behavior: auto; overscroll-behavior: auto;
flex-basis: min(100vw, var(--column-size)); flex-basis: min(100vw, var(--column-size));
flex-shrink: 0; flex-shrink: 0;
box-shadow: -1px 0 var(--bg-color), -2px 0 var(--drop-shadow-color), box-shadow:
-1px 0 var(--bg-color),
-2px 0 var(--drop-shadow-color),
-3px 0 var(--bg-color); -3px 0 var(--bg-color);
&:dir(rtl) { &:dir(rtl) {
box-shadow: 1px 0 var(--bg-color), 2px 0 var(--drop-shadow-color), box-shadow:
1px 0 var(--bg-color),
2px 0 var(--drop-shadow-color),
3px 0 var(--bg-color); 3px 0 var(--bg-color);
} }
} }

View file

@ -378,15 +378,17 @@ function AccountInfo({
<p> <p>
<Trans>Unable to load account.</Trans> <Trans>Unable to load account.</Trans>
</p> </p>
{isString ? (
<p> <p>
<a <code class="insignificant">{account}</code>
href={isString ? account : url} </p>
target="_blank" ) : (
rel="noopener noreferrer" <p>
> <a href={url} target="_blank" rel="noopener">
<Trans>Go to account page</Trans> <Icon icon="external" /> <Trans>Go to account page</Trans> <Icon icon="external" />
</a> </a>
</p> </p>
)}
</div> </div>
)} )}
{uiState === 'loading' ? ( {uiState === 'loading' ? (

View file

@ -13,12 +13,7 @@ function EmbedModal({ html, url, width, height, onClose = () => {} }) {
<Icon icon="x" alt={t`Close`} /> <Icon icon="x" alt={t`Close`} />
</button> </button>
{url && ( {url && (
<a <a href={url} target="_blank" rel="noopener" class="button plain">
href={url}
target="_blank"
rel="noopener noreferrer"
class="button plain"
>
<span> <span>
<Trans>Open in new window</Trans> <Trans>Open in new window</Trans>
</span>{' '} </span>{' '}

View file

@ -26,8 +26,10 @@ export default memo(function KeyboardShortcutsHelp() {
}, },
{ {
ignoreEventWhen: (e) => { ignoreEventWhen: (e) => {
const hasModal = !!document.querySelector('#modal-container > *'); const isCatchUpPage = /\/catchup/i.test(location.hash);
return hasModal; return isCatchUpPage;
// const hasModal = !!document.querySelector('#modal-container > *');
// return hasModal;
}, },
}, },
); );

View file

@ -510,7 +510,7 @@ function Notification({
<a <a
href={`https://${instance}/severed_relationships`} href={`https://${instance}/severed_relationships`}
target="_blank" target="_blank"
rel="noopener noreferrer" rel="noopener"
> >
<Trans> <Trans>
Learn more <Icon icon="external" size="s" /> Learn more <Icon icon="external" size="s" />
@ -526,7 +526,7 @@ function Notification({
<a <a
href={`/disputes/strikes/${moderation_warning.id}`} href={`/disputes/strikes/${moderation_warning.id}`}
target="_blank" target="_blank"
rel="noopener noreferrer" rel="noopener"
> >
<Trans> <Trans>
Learn more <Icon icon="external" size="s" /> Learn more <Icon icon="external" size="s" />
@ -550,7 +550,7 @@ function Notification({
<a <a
key={account.id} key={account.id}
href={account.url} href={account.url}
rel="noopener noreferrer" rel="noopener"
class="account-avatar-stack" class="account-avatar-stack"
onClick={(e) => { onClick={(e) => {
e.preventDefault(); e.preventDefault();
@ -654,7 +654,7 @@ function Notification({
<a <a
key={account.id} key={account.id}
href={account.url} href={account.url}
rel="noopener noreferrer" rel="noopener"
class="account-avatar-stack" class="account-avatar-stack"
onClick={(e) => { onClick={(e) => {
e.preventDefault(); e.preventDefault();

View file

@ -918,6 +918,25 @@ function Status({
const actionsRef = useRef(); const actionsRef = useRef();
const isPublic = ['public', 'unlisted'].includes(visibility); const isPublic = ['public', 'unlisted'].includes(visibility);
const isPinnable = ['public', 'unlisted', 'private'].includes(visibility); const isPinnable = ['public', 'unlisted', 'private'].includes(visibility);
const menuFooter =
mediaNoDesc && !reblogged ? (
<div class="footer">
<Icon icon="alert" />
<Trans>Some media have no descriptions.</Trans>
</div>
) : (
statusMonthsAgo >= 3 && (
<div class="footer">
<Icon icon="info" />
<span>
<Trans>
Old post (<strong>{rtf.format(-statusMonthsAgo, 'month')}</strong>
)
</Trans>
</span>
</div>
)
);
const StatusMenuItems = ( const StatusMenuItems = (
<> <>
{!isSizeLarge && sameInstance && ( {!isSizeLarge && sameInstance && (
@ -954,29 +973,7 @@ function Status({
</span> </span>
</MenuItem> </MenuItem>
} }
menuFooter={ menuFooter={menuFooter}
mediaNoDesc && !reblogged ? (
<div class="footer">
<Icon icon="alert" />
<Trans>Some media have no descriptions.</Trans>
</div>
) : (
statusMonthsAgo >= 3 && (
<div class="footer">
<Icon icon="info" />
<span>
<Trans>
Old post (
<strong>
{rtf.format(-statusMonthsAgo, 'month')}
</strong>
)
</Trans>
</span>
</div>
)
)
}
disabled={!canBoost} disabled={!canBoost}
onClick={async () => { onClick={async () => {
try { try {
@ -2282,7 +2279,7 @@ function Status({
alt={visibilityText[visibility]} alt={visibilityText[visibility]}
/> */} /> */}
<span>{_(visibilityText[visibility])}</span> &bull;{' '} <span>{_(visibilityText[visibility])}</span> &bull;{' '}
<a href={url} target="_blank" rel="noopener noreferrer"> <a href={url} target="_blank" rel="noopener">
{ {
// within a day // within a day
new Date().getTime() - createdAtDate.getTime() < new Date().getTime() - createdAtDate.getTime() <
@ -2429,15 +2426,7 @@ function Status({
</span> </span>
</MenuItem> </MenuItem>
} }
menuFooter={ menuFooter={menuFooter}
mediaNoDesc &&
!reblogged && (
<div class="footer">
<Icon icon="alert" />
<Trans>Some media have no descriptions.</Trans>
</div>
)
}
> >
<StatusButton <StatusButton
checked={reblogged} checked={reblogged}
@ -2820,7 +2809,7 @@ function Card({ card, selfReferential, selfAuthor, instance }) {
<a <a
href={cardStatusURL || url} href={cardStatusURL || url}
target={cardStatusURL ? null : '_blank'} target={cardStatusURL ? null : '_blank'}
rel="nofollow noopener noreferrer" rel="nofollow noopener"
class={`card link ${isPost ? 'card-post' : ''} ${ class={`card link ${isPost ? 'card-post' : ''} ${
blurhashImage ? '' : size blurhashImage ? '' : size
}`} }`}
@ -2883,7 +2872,7 @@ function Card({ card, selfReferential, selfAuthor, instance }) {
<a <a
href={url} href={url}
target="_blank" target="_blank"
rel="nofollow noopener noreferrer" rel="nofollow noopener"
class="card photo" class="card photo"
onClick={handleClick} onClick={handleClick}
> >
@ -2930,7 +2919,7 @@ function Card({ card, selfReferential, selfAuthor, instance }) {
<a <a
href={cardStatusURL || url} href={cardStatusURL || url}
target={cardStatusURL ? null : '_blank'} target={cardStatusURL ? null : '_blank'}
rel="nofollow noopener noreferrer" rel="nofollow noopener"
class={`card link ${isPost ? 'card-post' : ''} no-image`} class={`card link ${isPost ? 'card-post' : ''} no-image`}
lang={language} lang={language}
dir="auto" dir="auto"

View file

@ -149,7 +149,7 @@ function Timeline({
const activeItemRect = activeItem?.getBoundingClientRect(); const activeItemRect = activeItem?.getBoundingClientRect();
const allItems = Array.from( const allItems = Array.from(
scrollableRef.current.querySelectorAll(itemsSelector), scrollableRef.current.querySelectorAll(itemsSelector),
); ).filter((item) => !!item.offsetHeight);
if ( if (
activeItem && activeItem &&
activeItemRect.top < scrollableRef.current.clientHeight && activeItemRect.top < scrollableRef.current.clientHeight &&
@ -188,7 +188,7 @@ function Timeline({
const activeItemRect = activeItem?.getBoundingClientRect(); const activeItemRect = activeItem?.getBoundingClientRect();
const allItems = Array.from( const allItems = Array.from(
scrollableRef.current.querySelectorAll(itemsSelector), scrollableRef.current.querySelectorAll(itemsSelector),
); ).filter((item) => !!item.offsetHeight);
if ( if (
activeItem && activeItem &&
activeItemRect.top < scrollableRef.current.clientHeight && activeItemRect.top < scrollableRef.current.clientHeight &&

View file

@ -15,7 +15,7 @@
"code": "cs-CZ", "code": "cs-CZ",
"nativeName": "čeština", "nativeName": "čeština",
"name": "Czech", "name": "Czech",
"completion": 74 "completion": 84
}, },
{ {
"code": "de-DE", "code": "de-DE",

7
src/locales/ca-ES.po generated
View file

@ -8,7 +8,7 @@ msgstr ""
"Language: ca\n" "Language: ca\n"
"Project-Id-Version: phanpy\n" "Project-Id-Version: phanpy\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-12-27 18:00\n" "PO-Revision-Date: 2025-01-14 18:50\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Catalan\n" "Language-Team: Catalan\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
@ -76,7 +76,7 @@ msgstr "Verificat"
#: src/components/account-block.jsx:223 #: src/components/account-block.jsx:223
#: src/components/account-info.jsx:782 #: src/components/account-info.jsx:782
msgid "Joined <0>{0}</0>" msgid "Joined <0>{0}</0>"
msgstr "S'hi va unir <0>{0}</0>" msgstr "S'hi va unir el <0>{0}</0>"
#: src/components/account-info.jsx:58 #: src/components/account-info.jsx:58
msgid "Forever" msgid "Forever"
@ -1410,6 +1410,7 @@ msgid "Accounts…"
msgstr "Comptes…" msgstr "Comptes…"
#: src/components/nav-menu.jsx:315 #: src/components/nav-menu.jsx:315
#: src/pages/login.jsx:27
#: src/pages/login.jsx:190 #: src/pages/login.jsx:190
#: src/pages/status.jsx:837 #: src/pages/status.jsx:837
#: src/pages/welcome.jsx:65 #: src/pages/welcome.jsx:65
@ -2708,7 +2709,7 @@ msgstr "Grups"
#: src/pages/catchup.jsx:596 #: src/pages/catchup.jsx:596
msgid "Showing {selectedFilterCategory, select, all {all posts} original {original posts} replies {replies} boosts {boosts} followedTags {followed tags} groups {groups} filtered {filtered posts}}, {sortBy, select, createdAt {{sortOrder, select, asc {oldest} desc {latest}}} reblogsCount {{sortOrder, select, asc {fewest boosts} desc {most boosts}}} favouritesCount {{sortOrder, select, asc {fewest likes} desc {most likes}}} repliesCount {{sortOrder, select, asc {fewest replies} desc {most replies}}} density {{sortOrder, select, asc {least dense} desc {most dense}}}} first{groupBy, select, account {, grouped by authors} other {}}" msgid "Showing {selectedFilterCategory, select, all {all posts} original {original posts} replies {replies} boosts {boosts} followedTags {followed tags} groups {groups} filtered {filtered posts}}, {sortBy, select, createdAt {{sortOrder, select, asc {oldest} desc {latest}}} reblogsCount {{sortOrder, select, asc {fewest boosts} desc {most boosts}}} favouritesCount {{sortOrder, select, asc {fewest likes} desc {most likes}}} repliesCount {{sortOrder, select, asc {fewest replies} desc {most replies}}} density {{sortOrder, select, asc {least dense} desc {most dense}}}} first{groupBy, select, account {, grouped by authors} other {}}"
msgstr "Es mostren {selectedFilterCategory, select, all {totes les publicacions} original {publicacions originals} replies {respostes} boosts {impulsos} followedTags {etiquetes seguides} groups {grups} filtered {publicacions filtrades}}, {sortBy, select, createdAt {{sortOrder, select, asc {més antic} desc {més recent}}} reblogsCount {{sortOrder, select, asc {amb menys impulsos} desc {amb més impulsos}}} favouritesCount {{sortOrder, select, asc {amb menys favorits} desc {amb més favorits}}} repliesCount {{sortOrder, select, asc {amb menys respostes} desc {amb més respostes}}} density {{sortOrder, select, asc {amb menys densitat} desc {amb més densitat}}}} primer{groupBy, select, account {, agrupat per autors} other {}}" msgstr "Es mostren {selectedFilterCategory, select, all {totes les publicacions} original {publicacions originals} replies {respostes} boosts {impulsos} followedTags {etiquetes seguides} groups {grups} filtered {publicacions filtrades}}, {sortBy, select, createdAt {{sortOrder, select, asc {més antiga} desc {més recent}}} reblogsCount {{sortOrder, select, asc {amb menys impulsos} desc {amb més impulsos}}} favouritesCount {{sortOrder, select, asc {amb menys favorits} desc {amb més favorits}}} repliesCount {{sortOrder, select, asc {amb menys respostes} desc {amb més respostes}}} density {{sortOrder, select, asc {amb menys densitat} desc {amb més densitat}}}} primer{groupBy, select, account {, agrupat per autors} other {}}"
#: src/pages/catchup.jsx:882 #: src/pages/catchup.jsx:882
#: src/pages/catchup.jsx:906 #: src/pages/catchup.jsx:906

284
src/locales/cs-CZ.po generated
View file

@ -8,7 +8,7 @@ msgstr ""
"Language: cs\n" "Language: cs\n"
"Project-Id-Version: phanpy\n" "Project-Id-Version: phanpy\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-12-21 12:46\n" "PO-Revision-Date: 2025-01-06 21:33\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Czech\n" "Language-Team: Czech\n"
"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" "Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n"
@ -113,7 +113,7 @@ msgstr "Příspěvky"
#: src/components/account-info.jsx:429 #: src/components/account-info.jsx:429
#: src/components/account-info.jsx:1120 #: src/components/account-info.jsx:1120
#: src/components/compose.jsx:2592 #: src/components/compose.jsx:2624
#: src/components/media-alt-modal.jsx:46 #: src/components/media-alt-modal.jsx:46
#: src/components/media-modal.jsx:358 #: src/components/media-modal.jsx:358
#: src/components/status.jsx:1737 #: src/components/status.jsx:1737
@ -241,7 +241,7 @@ msgstr "Blokováno"
#: src/components/account-info.jsx:1096 #: src/components/account-info.jsx:1096
msgid "Private note" msgid "Private note"
msgstr "" msgstr "Soukromá poznámka"
#: src/components/account-info.jsx:1153 #: src/components/account-info.jsx:1153
msgid "Mention <0>@{username}</0>" msgid "Mention <0>@{username}</0>"
@ -253,43 +253,43 @@ msgstr "Přeložit bio"
#: src/components/account-info.jsx:1176 #: src/components/account-info.jsx:1176
msgid "Edit private note" msgid "Edit private note"
msgstr "" msgstr "Upravit soukromou poznámku"
#: src/components/account-info.jsx:1176 #: src/components/account-info.jsx:1176
msgid "Add private note" msgid "Add private note"
msgstr "" msgstr "Přidat soukromou poznámku"
#: src/components/account-info.jsx:1196 #: src/components/account-info.jsx:1196
msgid "Notifications enabled for @{username}'s posts." msgid "Notifications enabled for @{username}'s posts."
msgstr "" msgstr "Upozornění pro příspěvky od @{username} povolena."
#: src/components/account-info.jsx:1197 #: src/components/account-info.jsx:1197
msgid " Notifications disabled for @{username}'s posts." msgid " Notifications disabled for @{username}'s posts."
msgstr "" msgstr " Upozornění pro příspěvky od @{username} zakázána."
#: src/components/account-info.jsx:1209 #: src/components/account-info.jsx:1209
msgid "Disable notifications" msgid "Disable notifications"
msgstr "" msgstr "Vypnout upozornění"
#: src/components/account-info.jsx:1210 #: src/components/account-info.jsx:1210
msgid "Enable notifications" msgid "Enable notifications"
msgstr "" msgstr "Zapnout upozornění"
#: src/components/account-info.jsx:1227 #: src/components/account-info.jsx:1227
msgid "Boosts from @{username} enabled." msgid "Boosts from @{username} enabled."
msgstr "" msgstr "Boosty od @{username} povoleny."
#: src/components/account-info.jsx:1228 #: src/components/account-info.jsx:1228
msgid "Boosts from @{username} disabled." msgid "Boosts from @{username} disabled."
msgstr "" msgstr "Boosty od @{username} zakázány."
#: src/components/account-info.jsx:1239 #: src/components/account-info.jsx:1239
msgid "Disable boosts" msgid "Disable boosts"
msgstr "" msgstr "Zakázat boosty"
#: src/components/account-info.jsx:1239 #: src/components/account-info.jsx:1239
msgid "Enable boosts" msgid "Enable boosts"
msgstr "" msgstr "Povolit boosty"
#: src/components/account-info.jsx:1255 #: src/components/account-info.jsx:1255
#: src/components/account-info.jsx:1265 #: src/components/account-info.jsx:1265
@ -327,7 +327,7 @@ msgstr "Sdílet…"
#: src/components/account-info.jsx:1354 #: src/components/account-info.jsx:1354
msgid "Unmuted @{username}" msgid "Unmuted @{username}"
msgstr "" msgstr "Zrušeno ztlumení @{username}"
#: src/components/account-info.jsx:1366 #: src/components/account-info.jsx:1366
msgid "Unmute <0>@{username}</0>" msgid "Unmute <0>@{username}</0>"
@ -340,11 +340,11 @@ msgstr "Ztišit <0>@{username}</0>…"
#. placeholder {0}: typeof MUTE_DURATIONS_LABELS[duration] === 'function' ? MUTE_DURATIONS_LABELS[duration]() : _(MUTE_DURATIONS_LABELS[duration]) #. placeholder {0}: typeof MUTE_DURATIONS_LABELS[duration] === 'function' ? MUTE_DURATIONS_LABELS[duration]() : _(MUTE_DURATIONS_LABELS[duration])
#: src/components/account-info.jsx:1414 #: src/components/account-info.jsx:1414
msgid "Muted @{username} for {0}" msgid "Muted @{username} for {0}"
msgstr "" msgstr "Ztlumený @{username} na {0}"
#: src/components/account-info.jsx:1426 #: src/components/account-info.jsx:1426
msgid "Unable to mute @{username}" msgid "Unable to mute @{username}"
msgstr "" msgstr "Nelze ztlumit @{username}"
#: src/components/account-info.jsx:1447 #: src/components/account-info.jsx:1447
msgid "Remove <0>@{username}</0> from followers?" msgid "Remove <0>@{username}</0> from followers?"
@ -352,7 +352,7 @@ msgstr "Odstranit <0>@{username}</0> ze sledujících?"
#: src/components/account-info.jsx:1467 #: src/components/account-info.jsx:1467
msgid "@{username} removed from followers" msgid "@{username} removed from followers"
msgstr "" msgstr "@{username} odebrán/a ze sledujících"
#: src/components/account-info.jsx:1479 #: src/components/account-info.jsx:1479
msgid "Remove follower…" msgid "Remove follower…"
@ -364,19 +364,19 @@ msgstr "Blokovat <0>@{username}</0>?"
#: src/components/account-info.jsx:1514 #: src/components/account-info.jsx:1514
msgid "Unblocked @{username}" msgid "Unblocked @{username}"
msgstr "" msgstr "Odblokován @{username}"
#: src/components/account-info.jsx:1522 #: src/components/account-info.jsx:1522
msgid "Blocked @{username}" msgid "Blocked @{username}"
msgstr "" msgstr "Zablokován @{username}"
#: src/components/account-info.jsx:1530 #: src/components/account-info.jsx:1530
msgid "Unable to unblock @{username}" msgid "Unable to unblock @{username}"
msgstr "" msgstr "Nelze odblokovat uživatele @{username}"
#: src/components/account-info.jsx:1532 #: src/components/account-info.jsx:1532
msgid "Unable to block @{username}" msgid "Unable to block @{username}"
msgstr "" msgstr "Nelze zablokovat uživatele @{username}"
#: src/components/account-info.jsx:1542 #: src/components/account-info.jsx:1542
msgid "Unblock <0>@{username}</0>" msgid "Unblock <0>@{username}</0>"
@ -397,12 +397,12 @@ msgstr "Upravit profil"
#: src/components/account-info.jsx:1624 #: src/components/account-info.jsx:1624
msgid "Withdraw follow request?" msgid "Withdraw follow request?"
msgstr "" msgstr "Zrušit žádost o sledování?"
#. placeholder {1}: info.acct || info.username #. placeholder {1}: info.acct || info.username
#: src/components/account-info.jsx:1625 #: src/components/account-info.jsx:1625
msgid "Unfollow @{1}?" msgid "Unfollow @{1}?"
msgstr "" msgstr "Přestat sledovat @{1}?"
#: src/components/account-info.jsx:1676 #: src/components/account-info.jsx:1676
msgid "Unfollow…" msgid "Unfollow…"
@ -424,10 +424,10 @@ msgstr "Sledovat"
#: src/components/account-info.jsx:2098 #: src/components/account-info.jsx:2098
#: src/components/account-sheet.jsx:38 #: src/components/account-sheet.jsx:38
#: src/components/compose.jsx:859 #: src/components/compose.jsx:859
#: src/components/compose.jsx:2548 #: src/components/compose.jsx:2580
#: src/components/compose.jsx:3022 #: src/components/compose.jsx:3054
#: src/components/compose.jsx:3231 #: src/components/compose.jsx:3263
#: src/components/compose.jsx:3461 #: src/components/compose.jsx:3493
#: src/components/drafts.jsx:59 #: src/components/drafts.jsx:59
#: src/components/embed-modal.jsx:13 #: src/components/embed-modal.jsx:13
#: src/components/generic-accounts.jsx:143 #: src/components/generic-accounts.jsx:143
@ -459,11 +459,11 @@ msgstr "Přeložit bio"
#: src/components/account-info.jsx:1908 #: src/components/account-info.jsx:1908
msgid "Unable to remove from list." msgid "Unable to remove from list."
msgstr "" msgstr "Nelze odstranit ze seznamu."
#: src/components/account-info.jsx:1909 #: src/components/account-info.jsx:1909
msgid "Unable to add to list." msgid "Unable to add to list."
msgstr "" msgstr "Nelze přidat do seznamu."
#: src/components/account-info.jsx:1928 #: src/components/account-info.jsx:1928
#: src/pages/lists.jsx:105 #: src/pages/lists.jsx:105
@ -487,7 +487,7 @@ msgstr "Soukromá poznámka o <0> @{0}</0>"
#: src/components/account-info.jsx:2032 #: src/components/account-info.jsx:2032
msgid "Unable to update private note." msgid "Unable to update private note."
msgstr "" msgstr "Nelze aktualizovat soukromou poznámku."
#: src/components/account-info.jsx:2055 #: src/components/account-info.jsx:2055
#: src/components/account-info.jsx:2226 #: src/components/account-info.jsx:2226
@ -500,7 +500,7 @@ msgstr "Uložit a zavřít"
#: src/components/account-info.jsx:2154 #: src/components/account-info.jsx:2154
msgid "Unable to update profile." msgid "Unable to update profile."
msgstr "" msgstr "Nelze aktualizovat profil."
#: src/components/account-info.jsx:2161 #: src/components/account-info.jsx:2161
#: src/components/list-add-edit.jsx:105 #: src/components/list-add-edit.jsx:105
@ -566,7 +566,7 @@ msgstr "Vytvořit"
#: src/components/compose.jsx:206 #: src/components/compose.jsx:206
msgid "Add media" msgid "Add media"
msgstr "" msgstr "Přidat média"
#: src/components/compose.jsx:207 #: src/components/compose.jsx:207
msgid "Add custom emoji" msgid "Add custom emoji"
@ -574,7 +574,7 @@ msgstr "Přidat vlastní emoji"
#: src/components/compose.jsx:208 #: src/components/compose.jsx:208
msgid "Add GIF" msgid "Add GIF"
msgstr "" msgstr "Přidat GIF"
#: src/components/compose.jsx:209 #: src/components/compose.jsx:209
msgid "Add poll" msgid "Add poll"
@ -711,7 +711,7 @@ msgid "Mark media as sensitive"
msgstr "Označit média jako citlivá" msgstr "Označit média jako citlivá"
#: src/components/compose.jsx:1381 #: src/components/compose.jsx:1381
#: src/components/compose.jsx:3080 #: src/components/compose.jsx:3112
#: src/components/shortcuts-settings.jsx:715 #: src/components/shortcuts-settings.jsx:715
#: src/pages/list.jsx:362 #: src/pages/list.jsx:362
msgid "Add" msgid "Add"
@ -743,31 +743,31 @@ msgstr "Stahování GIFu…"
msgid "Failed to download GIF" msgid "Failed to download GIF"
msgstr "Nepodařilo se stáhnout GIF" msgstr "Nepodařilo se stáhnout GIF"
#: src/components/compose.jsx:1879 #: src/components/compose.jsx:1884
#: src/components/compose.jsx:1956 #: src/components/compose.jsx:1961
#: src/components/nav-menu.jsx:239 #: src/components/nav-menu.jsx:239
msgid "More…" msgid "More…"
msgstr "Více…" msgstr "Více…"
#: src/components/compose.jsx:2361 #: src/components/compose.jsx:2393
msgid "Uploaded" msgid "Uploaded"
msgstr "Odesláno" msgstr "Odesláno"
#: src/components/compose.jsx:2374 #: src/components/compose.jsx:2406
msgid "Image description" msgid "Image description"
msgstr "Popis obrázku" msgstr "Popis obrázku"
#: src/components/compose.jsx:2375 #: src/components/compose.jsx:2407
msgid "Video description" msgid "Video description"
msgstr "Popis videa" msgstr "Popis videa"
#: src/components/compose.jsx:2376 #: src/components/compose.jsx:2408
msgid "Audio description" msgid "Audio description"
msgstr "Popis audia" msgstr "Popis audia"
#. placeholder {0}: prettyBytes( imageSize, ) #. placeholder {0}: prettyBytes( imageSize, )
#. placeholder {1}: prettyBytes(imageSizeLimit) #. placeholder {1}: prettyBytes(imageSizeLimit)
#: src/components/compose.jsx:2412 #: src/components/compose.jsx:2444
msgid "File size too large. Uploading might encounter issues. Try reduce the file size from {0} to {1} or lower." msgid "File size too large. Uploading might encounter issues. Try reduce the file size from {0} to {1} or lower."
msgstr "Velikost souboru je příliš velká. Při nahrávání mohou vzniknout problémy. Zkuste zmenšit velikost souboru z {0} na {1} nebo nižší." msgstr "Velikost souboru je příliš velká. Při nahrávání mohou vzniknout problémy. Zkuste zmenšit velikost souboru z {0} na {1} nebo nižší."
@ -775,163 +775,163 @@ msgstr "Velikost souboru je příliš velká. Při nahrávání mohou vzniknout
#. placeholder {3}: i18n.number(height) #. placeholder {3}: i18n.number(height)
#. placeholder {4}: i18n.number(newWidth) #. placeholder {4}: i18n.number(newWidth)
#. placeholder {5}: i18n.number( newHeight, ) #. placeholder {5}: i18n.number( newHeight, )
#: src/components/compose.jsx:2424 #: src/components/compose.jsx:2456
msgid "Dimension too large. Uploading might encounter issues. Try reduce dimension from {2}×{3}px to {4}×{5}px." msgid "Dimension too large. Uploading might encounter issues. Try reduce dimension from {2}×{3}px to {4}×{5}px."
msgstr "" msgstr "Rozlišení je příliš velké. Při nahrávání mohou vzniknout problémy. Zkuste zmenšit rozlišení z {2}×{3}px na {4}×{5}px."
#. placeholder {6}: prettyBytes( videoSize, ) #. placeholder {6}: prettyBytes( videoSize, )
#. placeholder {7}: prettyBytes(videoSizeLimit) #. placeholder {7}: prettyBytes(videoSizeLimit)
#: src/components/compose.jsx:2432 #: src/components/compose.jsx:2464
msgid "File size too large. Uploading might encounter issues. Try reduce the file size from {6} to {7} or lower." msgid "File size too large. Uploading might encounter issues. Try reduce the file size from {6} to {7} or lower."
msgstr "" msgstr "Velikost souboru je příliš velká. Při nahrávání mohou vzniknout problémy. Zkuste zmenšit velikost souboru z {6} na {7} nebo nižší."
#. placeholder {8}: i18n.number( width, ) #. placeholder {8}: i18n.number( width, )
#. placeholder {9}: i18n.number(height) #. placeholder {9}: i18n.number(height)
#. placeholder {10}: i18n.number(newWidth) #. placeholder {10}: i18n.number(newWidth)
#. placeholder {11}: i18n.number( newHeight, ) #. placeholder {11}: i18n.number( newHeight, )
#: src/components/compose.jsx:2444 #: src/components/compose.jsx:2476
msgid "Dimension too large. Uploading might encounter issues. Try reduce dimension from {8}×{9}px to {10}×{11}px." msgid "Dimension too large. Uploading might encounter issues. Try reduce dimension from {8}×{9}px to {10}×{11}px."
msgstr "" msgstr "Rozměr je příliš velký. Při nahrávání mohou vzniknout problémy. Zkuste zmenšit velikost z {8}×{9}px na {10}×{11}px."
#: src/components/compose.jsx:2452 #: src/components/compose.jsx:2484
msgid "Frame rate too high. Uploading might encounter issues." msgid "Frame rate too high. Uploading might encounter issues."
msgstr "Snímková frekvence je příliš vysoká. Při nahrávání mohou vzniknout problémy." msgstr "Snímková frekvence je příliš vysoká. Při nahrávání mohou vzniknout problémy."
#: src/components/compose.jsx:2512 #: src/components/compose.jsx:2544
#: src/components/compose.jsx:2762 #: src/components/compose.jsx:2794
#: src/components/shortcuts-settings.jsx:726 #: src/components/shortcuts-settings.jsx:726
#: src/pages/catchup.jsx:1074 #: src/pages/catchup.jsx:1074
#: src/pages/filters.jsx:412 #: src/pages/filters.jsx:412
msgid "Remove" msgid "Remove"
msgstr "Odstranit" msgstr "Odstranit"
#: src/components/compose.jsx:2529 #: src/components/compose.jsx:2561
#: src/compose.jsx:84 #: src/compose.jsx:84
msgid "Error" msgid "Error"
msgstr "Chyba" msgstr "Chyba"
#: src/components/compose.jsx:2554 #: src/components/compose.jsx:2586
msgid "Edit image description" msgid "Edit image description"
msgstr "Upravit popis obrázku" msgstr "Upravit popis obrázku"
#: src/components/compose.jsx:2555 #: src/components/compose.jsx:2587
msgid "Edit video description" msgid "Edit video description"
msgstr "Upravit popis videa" msgstr "Upravit popis videa"
#: src/components/compose.jsx:2556 #: src/components/compose.jsx:2588
msgid "Edit audio description" msgid "Edit audio description"
msgstr "Upravit popis audia" msgstr "Upravit popis audia"
#: src/components/compose.jsx:2601 #: src/components/compose.jsx:2633
#: src/components/compose.jsx:2650 #: src/components/compose.jsx:2682
msgid "Generating description. Please wait…" msgid "Generating description. Please wait…"
msgstr "Generování popisu. Počkejte prosím…" msgstr "Generování popisu. Počkejte prosím…"
#. placeholder {12}: e.message #. placeholder {12}: e.message
#: src/components/compose.jsx:2621 #: src/components/compose.jsx:2653
msgid "Failed to generate description: {12}" msgid "Failed to generate description: {12}"
msgstr "" msgstr "Nepodařilo se vytvořit popisek: {12}"
#: src/components/compose.jsx:2622 #: src/components/compose.jsx:2654
msgid "Failed to generate description" msgid "Failed to generate description"
msgstr "Nepodařilo se vytvořit popis" msgstr "Nepodařilo se vytvořit popis"
#: src/components/compose.jsx:2634 #: src/components/compose.jsx:2666
#: src/components/compose.jsx:2640 #: src/components/compose.jsx:2672
#: src/components/compose.jsx:2686 #: src/components/compose.jsx:2718
msgid "Generate description…" msgid "Generate description…"
msgstr "Vytvořit popis…" msgstr "Vytvořit popis…"
#. placeholder {13}: e?.message ? `: ${e.message}` : '' #. placeholder {13}: e?.message ? `: ${e.message}` : ''
#: src/components/compose.jsx:2673 #: src/components/compose.jsx:2705
msgid "Failed to generate description{13}" msgid "Failed to generate description{13}"
msgstr "" msgstr "Nepodařilo se vytvořit popisek{13}"
#. placeholder {0}: localeCode2Text(lang) #. placeholder {0}: localeCode2Text(lang)
#: src/components/compose.jsx:2688 #: src/components/compose.jsx:2720
msgid "({0}) <0>— experimental</0>" msgid "({0}) <0>— experimental</0>"
msgstr "({0}) <0> experimentální</0>" msgstr "({0}) <0> experimentální</0>"
#: src/components/compose.jsx:2707 #: src/components/compose.jsx:2739
msgid "Done" msgid "Done"
msgstr "Hotovo" msgstr "Hotovo"
#. placeholder {0}: i + 1 #. placeholder {0}: i + 1
#: src/components/compose.jsx:2743 #: src/components/compose.jsx:2775
msgid "Choice {0}" msgid "Choice {0}"
msgstr "" msgstr "Volba {0}"
#: src/components/compose.jsx:2790 #: src/components/compose.jsx:2822
msgid "Multiple choices" msgid "Multiple choices"
msgstr "Více možností" msgstr "Více možností"
#: src/components/compose.jsx:2793 #: src/components/compose.jsx:2825
msgid "Duration" msgid "Duration"
msgstr "Trvání" msgstr "Trvání"
#: src/components/compose.jsx:2824 #: src/components/compose.jsx:2856
msgid "Remove poll" msgid "Remove poll"
msgstr "Odstranit anketu" msgstr "Odstranit anketu"
#: src/components/compose.jsx:3039 #: src/components/compose.jsx:3071
msgid "Search accounts" msgid "Search accounts"
msgstr "" msgstr "Hledat účty"
#: src/components/compose.jsx:3093 #: src/components/compose.jsx:3125
#: src/components/generic-accounts.jsx:228 #: src/components/generic-accounts.jsx:228
msgid "Error loading accounts" msgid "Error loading accounts"
msgstr "Chyba při načítání účtů" msgstr "Chyba při načítání účtů"
#: src/components/compose.jsx:3237 #: src/components/compose.jsx:3269
msgid "Custom emojis" msgid "Custom emojis"
msgstr "Vlastní emoji" msgstr "Vlastní emoji"
#: src/components/compose.jsx:3257 #: src/components/compose.jsx:3289
msgid "Search emoji" msgid "Search emoji"
msgstr "" msgstr "Hledat emoji"
#: src/components/compose.jsx:3288 #: src/components/compose.jsx:3320
msgid "Error loading custom emojis" msgid "Error loading custom emojis"
msgstr "Chyba při načítání vlastních emoji" msgstr "Chyba při načítání vlastních emoji"
#: src/components/compose.jsx:3299 #: src/components/compose.jsx:3331
msgid "Recently used" msgid "Recently used"
msgstr "" msgstr "Nedávno použité"
#: src/components/compose.jsx:3300 #: src/components/compose.jsx:3332
msgid "Others" msgid "Others"
msgstr "" msgstr "Ostatní"
#. placeholder {0}: i18n.number(emojis.length - max) #. placeholder {0}: i18n.number(emojis.length - max)
#: src/components/compose.jsx:3338 #: src/components/compose.jsx:3370
msgid "{0} more…" msgid "{0} more…"
msgstr "{0} další…" msgstr "{0} další…"
#: src/components/compose.jsx:3476 #: src/components/compose.jsx:3508
msgid "Search GIFs" msgid "Search GIFs"
msgstr "" msgstr "Hledat GIFy"
#: src/components/compose.jsx:3491 #: src/components/compose.jsx:3523
msgid "Powered by GIPHY" msgid "Powered by GIPHY"
msgstr "" msgstr "Běží na GIPHY"
#: src/components/compose.jsx:3499 #: src/components/compose.jsx:3531
msgid "Type to search GIFs" msgid "Type to search GIFs"
msgstr "Zadejte pro vyhledávání GIFů" msgstr "Zadejte pro vyhledávání GIFů"
#: src/components/compose.jsx:3597 #: src/components/compose.jsx:3629
#: src/components/media-modal.jsx:462 #: src/components/media-modal.jsx:462
#: src/components/timeline.jsx:893 #: src/components/timeline.jsx:893
msgid "Previous" msgid "Previous"
msgstr "Zpět" msgstr "Zpět"
#: src/components/compose.jsx:3615 #: src/components/compose.jsx:3647
#: src/components/media-modal.jsx:481 #: src/components/media-modal.jsx:481
#: src/components/timeline.jsx:910 #: src/components/timeline.jsx:910
msgid "Next" msgid "Next"
msgstr "Další" msgstr "Další"
#: src/components/compose.jsx:3632 #: src/components/compose.jsx:3664
msgid "Error loading GIFs" msgid "Error loading GIFs"
msgstr "Chyba při načítání GIFů" msgstr "Chyba při načítání GIFů"
@ -1109,11 +1109,11 @@ msgstr "<0>1</0> do <1>9</1>"
#: src/components/keyboard-shortcuts-help.jsx:118 #: src/components/keyboard-shortcuts-help.jsx:118
msgid "Focus next column in multi-column mode" msgid "Focus next column in multi-column mode"
msgstr "" msgstr "Zaměřit se na další sloupec v režimu více sloupců"
#: src/components/keyboard-shortcuts-help.jsx:122 #: src/components/keyboard-shortcuts-help.jsx:122
msgid "Focus previous column in multi-column mode" msgid "Focus previous column in multi-column mode"
msgstr "" msgstr "Zaměřit se na předchozí sloupec v režimu více sloupců"
#: src/components/keyboard-shortcuts-help.jsx:126 #: src/components/keyboard-shortcuts-help.jsx:126
msgid "Compose new post" msgid "Compose new post"
@ -1534,7 +1534,7 @@ msgstr "Upozornění na moderování"
#: src/components/notification.jsx:265 #: src/components/notification.jsx:265
msgid "Your {year} #Wrapstodon is here!" msgid "Your {year} #Wrapstodon is here!"
msgstr "" msgstr "Tvůj {year} #Wrapstodon je tady!"
#: src/components/notification.jsx:271 #: src/components/notification.jsx:271
msgid "An admin from <0>{from}</0> has suspended <1>{targetName}</1>, which means you can no longer receive updates from them or interact with them." msgid "An admin from <0>{from}</0> has suspended <1>{targetName}</1>, which means you can no longer receive updates from them or interact with them."
@ -1605,7 +1605,7 @@ msgstr "Další informace <0/>"
#: src/components/notification.jsx:540 #: src/components/notification.jsx:540
msgid "View #Wrapstodon" msgid "View #Wrapstodon"
msgstr "" msgstr "Zobrazit #Wrapstodon"
#: src/components/notification.jsx:770 #: src/components/notification.jsx:770
#: src/components/status.jsx:267 #: src/components/status.jsx:267
@ -2124,17 +2124,17 @@ msgstr "Nelíbí se @{0}"
#. placeholder {1}: username || acct #. placeholder {1}: username || acct
#: src/components/status.jsx:791 #: src/components/status.jsx:791
msgid "Liked @{1}'s post" msgid "Liked @{1}'s post"
msgstr "" msgstr "Líbí se příspěvek od @{1}"
#. placeholder {2}: username || acct #. placeholder {2}: username || acct
#: src/components/status.jsx:830 #: src/components/status.jsx:830
msgid "Unbookmarked @{2}'s post" msgid "Unbookmarked @{2}'s post"
msgstr "" msgstr "Odebrali jste záložku z příspěvku od @{2}"
#. placeholder {3}: username || acct #. placeholder {3}: username || acct
#: src/components/status.jsx:831 #: src/components/status.jsx:831
msgid "Bookmarked @{3}'s post" msgid "Bookmarked @{3}'s post"
msgstr "" msgstr "Přidali jste příspěvek od @{3} do záložek"
#: src/components/status.jsx:937 #: src/components/status.jsx:937
#: src/components/status.jsx:999 #: src/components/status.jsx:999
@ -2161,12 +2161,12 @@ msgstr "Starý příspěvek (<0>{0}</0>)"
#. placeholder {4}: username || acct #. placeholder {4}: username || acct
#: src/components/status.jsx:987 #: src/components/status.jsx:987
msgid "Unboosted @{4}'s post" msgid "Unboosted @{4}'s post"
msgstr "" msgstr "Zrušili jste boostnutí příspěvku od @{4}"
#. placeholder {5}: username || acct #. placeholder {5}: username || acct
#: src/components/status.jsx:988 #: src/components/status.jsx:988
msgid "Boosted @{5}'s post" msgid "Boosted @{5}'s post"
msgstr "" msgstr "Boostnuli jste příspěvek od @{5}"
#: src/components/status.jsx:1000 #: src/components/status.jsx:1000
msgid "Boost…" msgid "Boost…"
@ -2276,12 +2276,12 @@ msgstr "Nahlásit příspěvek…"
#. placeholder {6}: username || acct #. placeholder {6}: username || acct
#: src/components/status.jsx:1442 #: src/components/status.jsx:1442
msgid "Unboosted @{6}'s post" msgid "Unboosted @{6}'s post"
msgstr "" msgstr "Zrušili jste boostnutí příspěvku od @{6}"
#. placeholder {7}: username || acct #. placeholder {7}: username || acct
#: src/components/status.jsx:1443 #: src/components/status.jsx:1443
msgid "Boosted @{7}'s post" msgid "Boosted @{7}'s post"
msgstr "" msgstr "Boostnuli jste příspěvek od @{7}"
#: src/components/status.jsx:1728 #: src/components/status.jsx:1728
#: src/components/status.jsx:1764 #: src/components/status.jsx:1764
@ -2343,7 +2343,7 @@ msgstr "Komentáře"
#. More from [Author] #. More from [Author]
#: src/components/status.jsx:2696 #: src/components/status.jsx:2696
msgid "More from <0/>" msgid "More from <0/>"
msgstr "" msgstr "Více od <0/>"
#: src/components/status.jsx:2998 #: src/components/status.jsx:2998
msgid "Edit History" msgid "Edit History"
@ -2436,7 +2436,7 @@ msgstr "Zkuste to znovu"
#. placeholder {0}: fItems.length #. placeholder {0}: fItems.length
#: src/components/timeline.jsx:591 #: src/components/timeline.jsx:591
msgid "{0, plural, one {# Boost} other {# Boosts}}" msgid "{0, plural, one {# Boost} other {# Boosts}}"
msgstr "" msgstr "{0, plural, one {# Boostnutí} other {# Boostnutí}}"
#: src/components/timeline.jsx:596 #: src/components/timeline.jsx:596
msgid "Pinned posts" msgid "Pinned posts"
@ -2610,7 +2610,7 @@ msgstr "Přepněte na tento účet"
#: src/pages/accounts.jsx:133 #: src/pages/accounts.jsx:133
msgid "Switch in new tab/window" msgid "Switch in new tab/window"
msgstr "" msgstr "Přepnout v novém panelu/okně"
#: src/pages/accounts.jsx:147 #: src/pages/accounts.jsx:147
msgid "View profile…" msgid "View profile…"
@ -2904,7 +2904,7 @@ msgstr "Filtrováno: {0}"
#: src/pages/favourites.jsx:26 #: src/pages/favourites.jsx:26
msgid "No likes yet. Go like something!" msgid "No likes yet. Go like something!"
msgstr "" msgstr "Neudělili jste žádné \"líbí se mi\". Označte něco, co se vám líbí!"
#: src/pages/favourites.jsx:27 #: src/pages/favourites.jsx:27
msgid "Unable to load likes." msgid "Unable to load likes."
@ -3007,7 +3007,7 @@ msgstr "Vypršení platnosti"
#: src/pages/filters.jsx:526 #: src/pages/filters.jsx:526
msgid "Filtered post will be…" msgid "Filtered post will be…"
msgstr "" msgstr "Filtrovaný příspěvek bude…"
#: src/pages/filters.jsx:536 #: src/pages/filters.jsx:536
msgid "minimized" msgid "minimized"
@ -3031,11 +3031,11 @@ msgstr "Vypršelo"
#: src/pages/filters.jsx:611 #: src/pages/filters.jsx:611
msgid "Expiring <0/>" msgid "Expiring <0/>"
msgstr "" msgstr "Vyprší <0/>"
#: src/pages/filters.jsx:615 #: src/pages/filters.jsx:615
msgid "Never expires" msgid "Never expires"
msgstr "" msgstr "Nikdy nevyprší"
#. placeholder {0}: followedHashtags.length #. placeholder {0}: followedHashtags.length
#: src/pages/followed-hashtags.jsx:71 #: src/pages/followed-hashtags.jsx:71
@ -3061,19 +3061,19 @@ msgstr "Nelze načíst příspěvky."
#: src/pages/hashtag.jsx:56 #: src/pages/hashtag.jsx:56
msgid "{hashtagTitle} (Media only) on {instance}" msgid "{hashtagTitle} (Media only) on {instance}"
msgstr "" msgstr "{hashtagTitle} (pouze média) na {instance}"
#: src/pages/hashtag.jsx:57 #: src/pages/hashtag.jsx:57
msgid "{hashtagTitle} on {instance}" msgid "{hashtagTitle} on {instance}"
msgstr "" msgstr "{hashtagTitle} na {instance}"
#: src/pages/hashtag.jsx:59 #: src/pages/hashtag.jsx:59
msgid "{hashtagTitle} (Media only)" msgid "{hashtagTitle} (Media only)"
msgstr "" msgstr "{hashtagTitle} (pouze média)"
#: src/pages/hashtag.jsx:60 #: src/pages/hashtag.jsx:60
msgid "{hashtagTitle}" msgid "{hashtagTitle}"
msgstr "" msgstr "{hashtagTitle}"
#: src/pages/hashtag.jsx:182 #: src/pages/hashtag.jsx:182
msgid "No one has posted anything with this tag yet." msgid "No one has posted anything with this tag yet."
@ -3085,7 +3085,7 @@ msgstr "Nepodařilo se načíst příspěvky s tímto štítkem"
#: src/pages/hashtag.jsx:209 #: src/pages/hashtag.jsx:209
msgid "Unfollow #{hashtag}?" msgid "Unfollow #{hashtag}?"
msgstr "" msgstr "Přestat sledovat #{hashtag}?"
#: src/pages/hashtag.jsx:224 #: src/pages/hashtag.jsx:224
msgid "Unfollowed #{hashtag}" msgid "Unfollowed #{hashtag}"
@ -3093,28 +3093,28 @@ msgstr "#{hashtag} již není sledován"
#: src/pages/hashtag.jsx:239 #: src/pages/hashtag.jsx:239
msgid "Followed #{hashtag}" msgid "Followed #{hashtag}"
msgstr "" msgstr "Sledován #{hashtag}"
#: src/pages/hashtag.jsx:255 #: src/pages/hashtag.jsx:255
msgid "Following…" msgid "Following…"
msgstr "" msgstr "Sleduji…"
#: src/pages/hashtag.jsx:283 #: src/pages/hashtag.jsx:283
msgid "Unfeatured on profile" msgid "Unfeatured on profile"
msgstr "" msgstr "Odebráno z profilu"
#: src/pages/hashtag.jsx:297 #: src/pages/hashtag.jsx:297
msgid "Unable to unfeature on profile" msgid "Unable to unfeature on profile"
msgstr "" msgstr "Nepodařilo se odebrat z profilu"
#: src/pages/hashtag.jsx:306 #: src/pages/hashtag.jsx:306
#: src/pages/hashtag.jsx:322 #: src/pages/hashtag.jsx:322
msgid "Featured on profile" msgid "Featured on profile"
msgstr "" msgstr "Zmíněno v profilu"
#: src/pages/hashtag.jsx:329 #: src/pages/hashtag.jsx:329
msgid "Feature on profile" msgid "Feature on profile"
msgstr "" msgstr "Zmínit v profilu"
#: src/pages/hashtag.jsx:394 #: src/pages/hashtag.jsx:394
msgid "{TOTAL_TAGS_LIMIT, plural, other {Max # tags}}" msgid "{TOTAL_TAGS_LIMIT, plural, other {Max # tags}}"
@ -3134,7 +3134,7 @@ msgstr ""
#: src/pages/hashtag.jsx:472 #: src/pages/hashtag.jsx:472
msgid "This shortcut already exists" msgid "This shortcut already exists"
msgstr "" msgstr "Tato zkratka již existuje"
#: src/pages/hashtag.jsx:475 #: src/pages/hashtag.jsx:475
msgid "Hashtag shortcut added" msgid "Hashtag shortcut added"
@ -3170,37 +3170,37 @@ msgstr "Přejít na moji instanci (<0>{currentInstance}</0>)"
#: src/pages/home.jsx:210 #: src/pages/home.jsx:210
msgid "Unable to fetch notifications." msgid "Unable to fetch notifications."
msgstr "" msgstr "Nelze načíst oznámení."
#: src/pages/home.jsx:230 #: src/pages/home.jsx:230
msgid "<0>New</0> <1>Follow Requests</1>" msgid "<0>New</0> <1>Follow Requests</1>"
msgstr "" msgstr "<0>Nové</0> <1>Žádosti o sledování</1>"
#: src/pages/home.jsx:236 #: src/pages/home.jsx:236
msgid "See all" msgid "See all"
msgstr "" msgstr "Zobrazit vše"
#: src/pages/http-route.jsx:68 #: src/pages/http-route.jsx:68
msgid "Resolving…" msgid "Resolving…"
msgstr "" msgstr "Připojování…"
#: src/pages/http-route.jsx:79 #: src/pages/http-route.jsx:79
msgid "Unable to resolve URL" msgid "Unable to resolve URL"
msgstr "" msgstr "Nelze najít URL adresu"
#: src/pages/list.jsx:108 #: src/pages/list.jsx:108
msgid "Nothing yet." msgid "Nothing yet."
msgstr "" msgstr "Zatím nic."
#: src/pages/list.jsx:177 #: src/pages/list.jsx:177
#: src/pages/list.jsx:281 #: src/pages/list.jsx:281
msgid "Manage members" msgid "Manage members"
msgstr "" msgstr "Spravovat členy"
#. placeholder {0}: account.username #. placeholder {0}: account.username
#: src/pages/list.jsx:316 #: src/pages/list.jsx:316
msgid "Remove <0>@{0}</0> from list?" msgid "Remove <0>@{0}</0> from list?"
msgstr "" msgstr "Odstranit <0>@{0}</0> ze seznamu?"
#: src/pages/list.jsx:362 #: src/pages/list.jsx:362
msgid "Remove…" msgid "Remove…"
@ -3213,12 +3213,12 @@ msgstr ""
#: src/pages/lists.jsx:109 #: src/pages/lists.jsx:109
msgid "No lists yet." msgid "No lists yet."
msgstr "" msgstr "Nemáte žádné seznamy."
#: src/pages/login.jsx:110 #: src/pages/login.jsx:110
#: src/pages/login.jsx:123 #: src/pages/login.jsx:123
msgid "Failed to register application" msgid "Failed to register application"
msgstr "" msgstr "Nepodařilo se zaregistrovat aplikaci"
#: src/pages/login.jsx:209 #: src/pages/login.jsx:209
msgid "instance domain" msgid "instance domain"
@ -3226,7 +3226,7 @@ msgstr ""
#: src/pages/login.jsx:233 #: src/pages/login.jsx:233
msgid "e.g. “mastodon.social”" msgid "e.g. “mastodon.social”"
msgstr "" msgstr "např. “mastodon.social”"
#: src/pages/login.jsx:244 #: src/pages/login.jsx:244
msgid "Failed to log in. Please try again or try another instance." msgid "Failed to log in. Please try again or try another instance."
@ -3238,7 +3238,7 @@ msgstr ""
#: src/pages/login.jsx:257 #: src/pages/login.jsx:257
msgid "Continue" msgid "Continue"
msgstr "" msgstr "Pokračovat"
#: src/pages/login.jsx:265 #: src/pages/login.jsx:265
msgid "Don't have an account? Create one!" msgid "Don't have an account? Create one!"
@ -3319,7 +3319,7 @@ msgstr "Dnes"
#: src/pages/notifications.jsx:796 #: src/pages/notifications.jsx:796
msgid "You're all caught up." msgid "You're all caught up."
msgstr "" msgstr "Přečetli jste všechny komentáře."
#: src/pages/notifications.jsx:819 #: src/pages/notifications.jsx:819
msgid "Yesterday" msgid "Yesterday"
@ -3483,11 +3483,11 @@ msgstr "Vzhled"
#: src/pages/settings.jsx:168 #: src/pages/settings.jsx:168
msgid "Light" msgid "Light"
msgstr "" msgstr "Světlý"
#: src/pages/settings.jsx:179 #: src/pages/settings.jsx:179
msgid "Dark" msgid "Dark"
msgstr "" msgstr "Tmavý"
#: src/pages/settings.jsx:192 #: src/pages/settings.jsx:192
msgid "Auto" msgid "Auto"
@ -3518,12 +3518,12 @@ msgstr ""
#: src/pages/settings.jsx:273 #: src/pages/settings.jsx:273
msgid "Default visibility" msgid "Default visibility"
msgstr "" msgstr "Výchozí viditelnost"
#: src/pages/settings.jsx:274 #: src/pages/settings.jsx:274
#: src/pages/settings.jsx:320 #: src/pages/settings.jsx:320
msgid "Synced" msgid "Synced"
msgstr "" msgstr "Synchronizováno"
#: src/pages/settings.jsx:299 #: src/pages/settings.jsx:299
msgid "Failed to update posting privacy" msgid "Failed to update posting privacy"
@ -3551,7 +3551,7 @@ msgstr ""
#: src/pages/settings.jsx:389 #: src/pages/settings.jsx:389
msgid "Translate to " msgid "Translate to "
msgstr "" msgstr "Přeložit do "
#: src/pages/settings.jsx:400 #: src/pages/settings.jsx:400
msgid "System language ({systemTargetLanguageText})" msgid "System language ({systemTargetLanguageText})"
@ -3839,15 +3839,15 @@ msgstr ""
#: src/pages/welcome.jsx:65 #: src/pages/welcome.jsx:65
msgid "Log in with Mastodon" msgid "Log in with Mastodon"
msgstr "" msgstr "Přihlásit účtem Mastodon"
#: src/pages/welcome.jsx:71 #: src/pages/welcome.jsx:71
msgid "Sign up" msgid "Sign up"
msgstr "" msgstr "Vytvořit účet"
#: src/pages/welcome.jsx:78 #: src/pages/welcome.jsx:78
msgid "Connect your existing Mastodon/Fediverse account.<0/>Your credentials are not stored on this server." msgid "Connect your existing Mastodon/Fediverse account.<0/>Your credentials are not stored on this server."
msgstr "" msgstr "Připojte svůj existující Mastodon/Fediverse účet.<0/>Vaše přihlašovací údaje nejsou uloženy na tomto serveru."
#: src/pages/welcome.jsx:95 #: src/pages/welcome.jsx:95
msgid "<0>Built</0> by <1>@cheeaun</1>. <2>Privacy Policy</2>." msgid "<0>Built</0> by <1>@cheeaun</1>. <2>Privacy Policy</2>."

606
src/locales/en.po generated

File diff suppressed because it is too large Load diff

109
src/locales/eu-ES.po generated
View file

@ -8,7 +8,7 @@ msgstr ""
"Language: eu\n" "Language: eu\n"
"Project-Id-Version: phanpy\n" "Project-Id-Version: phanpy\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-12-21 14:14\n" "PO-Revision-Date: 2025-01-22 09:57\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Basque\n" "Language-Team: Basque\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
@ -113,7 +113,7 @@ msgstr "bidalketa"
#: src/components/account-info.jsx:429 #: src/components/account-info.jsx:429
#: src/components/account-info.jsx:1120 #: src/components/account-info.jsx:1120
#: src/components/compose.jsx:2592 #: src/components/compose.jsx:2624
#: src/components/media-alt-modal.jsx:46 #: src/components/media-alt-modal.jsx:46
#: src/components/media-modal.jsx:358 #: src/components/media-modal.jsx:358
#: src/components/status.jsx:1737 #: src/components/status.jsx:1737
@ -424,10 +424,10 @@ msgstr "Jarraitu"
#: src/components/account-info.jsx:2098 #: src/components/account-info.jsx:2098
#: src/components/account-sheet.jsx:38 #: src/components/account-sheet.jsx:38
#: src/components/compose.jsx:859 #: src/components/compose.jsx:859
#: src/components/compose.jsx:2548 #: src/components/compose.jsx:2580
#: src/components/compose.jsx:3022 #: src/components/compose.jsx:3054
#: src/components/compose.jsx:3231 #: src/components/compose.jsx:3263
#: src/components/compose.jsx:3461 #: src/components/compose.jsx:3493
#: src/components/drafts.jsx:59 #: src/components/drafts.jsx:59
#: src/components/embed-modal.jsx:13 #: src/components/embed-modal.jsx:13
#: src/components/generic-accounts.jsx:143 #: src/components/generic-accounts.jsx:143
@ -711,7 +711,7 @@ msgid "Mark media as sensitive"
msgstr "Markatu multimedia hunkigarri gisa" msgstr "Markatu multimedia hunkigarri gisa"
#: src/components/compose.jsx:1381 #: src/components/compose.jsx:1381
#: src/components/compose.jsx:3080 #: src/components/compose.jsx:3112
#: src/components/shortcuts-settings.jsx:715 #: src/components/shortcuts-settings.jsx:715
#: src/pages/list.jsx:362 #: src/pages/list.jsx:362
msgid "Add" msgid "Add"
@ -743,31 +743,31 @@ msgstr "GIFa deskargatzen…"
msgid "Failed to download GIF" msgid "Failed to download GIF"
msgstr "Ezin da GIFa deskargatu" msgstr "Ezin da GIFa deskargatu"
#: src/components/compose.jsx:1879 #: src/components/compose.jsx:1884
#: src/components/compose.jsx:1956 #: src/components/compose.jsx:1961
#: src/components/nav-menu.jsx:239 #: src/components/nav-menu.jsx:239
msgid "More…" msgid "More…"
msgstr "Gehiago…" msgstr "Gehiago…"
#: src/components/compose.jsx:2361 #: src/components/compose.jsx:2393
msgid "Uploaded" msgid "Uploaded"
msgstr "Igota" msgstr "Igota"
#: src/components/compose.jsx:2374 #: src/components/compose.jsx:2406
msgid "Image description" msgid "Image description"
msgstr "Irudiaren deskribapena" msgstr "Irudiaren deskribapena"
#: src/components/compose.jsx:2375 #: src/components/compose.jsx:2407
msgid "Video description" msgid "Video description"
msgstr "Bideoaren deskribapena" msgstr "Bideoaren deskribapena"
#: src/components/compose.jsx:2376 #: src/components/compose.jsx:2408
msgid "Audio description" msgid "Audio description"
msgstr "Audioaren deskribapena" msgstr "Audioaren deskribapena"
#. placeholder {0}: prettyBytes( imageSize, ) #. placeholder {0}: prettyBytes( imageSize, )
#. placeholder {1}: prettyBytes(imageSizeLimit) #. placeholder {1}: prettyBytes(imageSizeLimit)
#: src/components/compose.jsx:2412 #: src/components/compose.jsx:2444
msgid "File size too large. Uploading might encounter issues. Try reduce the file size from {0} to {1} or lower." msgid "File size too large. Uploading might encounter issues. Try reduce the file size from {0} to {1} or lower."
msgstr "Fitxategia handiegia da. Igoerak arazoak izan ditzake. Saiatu tamaina {0}tik {1} edo gutxiagora murrizten." msgstr "Fitxategia handiegia da. Igoerak arazoak izan ditzake. Saiatu tamaina {0}tik {1} edo gutxiagora murrizten."
@ -775,13 +775,13 @@ msgstr "Fitxategia handiegia da. Igoerak arazoak izan ditzake. Saiatu tamaina {0
#. placeholder {3}: i18n.number(height) #. placeholder {3}: i18n.number(height)
#. placeholder {4}: i18n.number(newWidth) #. placeholder {4}: i18n.number(newWidth)
#. placeholder {5}: i18n.number( newHeight, ) #. placeholder {5}: i18n.number( newHeight, )
#: src/components/compose.jsx:2424 #: src/components/compose.jsx:2456
msgid "Dimension too large. Uploading might encounter issues. Try reduce dimension from {2}×{3}px to {4}×{5}px." msgid "Dimension too large. Uploading might encounter issues. Try reduce dimension from {2}×{3}px to {4}×{5}px."
msgstr "Neurria handiegia da. Igoerak arazoak izan ditzake. Saiatu neurria {2}×{3}px-etik {4}×{5}px edo gutxiagora murrizten." msgstr "Neurria handiegia da. Igoerak arazoak izan ditzake. Saiatu neurria {2}×{3}px-etik {4}×{5}px edo gutxiagora murrizten."
#. placeholder {6}: prettyBytes( videoSize, ) #. placeholder {6}: prettyBytes( videoSize, )
#. placeholder {7}: prettyBytes(videoSizeLimit) #. placeholder {7}: prettyBytes(videoSizeLimit)
#: src/components/compose.jsx:2432 #: src/components/compose.jsx:2464
msgid "File size too large. Uploading might encounter issues. Try reduce the file size from {6} to {7} or lower." msgid "File size too large. Uploading might encounter issues. Try reduce the file size from {6} to {7} or lower."
msgstr "Fitxategia handiegia da. Igoerak arazoak izan ditzake. Saiatu tamaina {6}tik {7} edo gutxiagora murrizten." msgstr "Fitxategia handiegia da. Igoerak arazoak izan ditzake. Saiatu tamaina {6}tik {7} edo gutxiagora murrizten."
@ -789,149 +789,149 @@ msgstr "Fitxategia handiegia da. Igoerak arazoak izan ditzake. Saiatu tamaina {6
#. placeholder {9}: i18n.number(height) #. placeholder {9}: i18n.number(height)
#. placeholder {10}: i18n.number(newWidth) #. placeholder {10}: i18n.number(newWidth)
#. placeholder {11}: i18n.number( newHeight, ) #. placeholder {11}: i18n.number( newHeight, )
#: src/components/compose.jsx:2444 #: src/components/compose.jsx:2476
msgid "Dimension too large. Uploading might encounter issues. Try reduce dimension from {8}×{9}px to {10}×{11}px." msgid "Dimension too large. Uploading might encounter issues. Try reduce dimension from {8}×{9}px to {10}×{11}px."
msgstr "Neurria handiegia da. Igoerak arazoak izan ditzake. Saiatu neurria {8}×{9}px-etik {10}×{11}px edo gutxiagora murrizten." msgstr "Neurria handiegia da. Igoerak arazoak izan ditzake. Saiatu neurria {8}×{9}px-etik {10}×{11}px edo gutxiagora murrizten."
#: src/components/compose.jsx:2452 #: src/components/compose.jsx:2484
msgid "Frame rate too high. Uploading might encounter issues." msgid "Frame rate too high. Uploading might encounter issues."
msgstr "Fotograma-tasa (frame rate) altuegia da. Igoerak arazoak izan ditzake." msgstr "Fotograma-tasa (frame rate) altuegia da. Igoerak arazoak izan ditzake."
#: src/components/compose.jsx:2512 #: src/components/compose.jsx:2544
#: src/components/compose.jsx:2762 #: src/components/compose.jsx:2794
#: src/components/shortcuts-settings.jsx:726 #: src/components/shortcuts-settings.jsx:726
#: src/pages/catchup.jsx:1074 #: src/pages/catchup.jsx:1074
#: src/pages/filters.jsx:412 #: src/pages/filters.jsx:412
msgid "Remove" msgid "Remove"
msgstr "Kendu" msgstr "Kendu"
#: src/components/compose.jsx:2529 #: src/components/compose.jsx:2561
#: src/compose.jsx:84 #: src/compose.jsx:84
msgid "Error" msgid "Error"
msgstr "Errorea" msgstr "Errorea"
#: src/components/compose.jsx:2554 #: src/components/compose.jsx:2586
msgid "Edit image description" msgid "Edit image description"
msgstr "Editatu irudiaren deskribapena" msgstr "Editatu irudiaren deskribapena"
#: src/components/compose.jsx:2555 #: src/components/compose.jsx:2587
msgid "Edit video description" msgid "Edit video description"
msgstr "Editatu bideoaren deskribapena" msgstr "Editatu bideoaren deskribapena"
#: src/components/compose.jsx:2556 #: src/components/compose.jsx:2588
msgid "Edit audio description" msgid "Edit audio description"
msgstr "Editatu audioaren deskribapena" msgstr "Editatu audioaren deskribapena"
#: src/components/compose.jsx:2601 #: src/components/compose.jsx:2633
#: src/components/compose.jsx:2650 #: src/components/compose.jsx:2682
msgid "Generating description. Please wait…" msgid "Generating description. Please wait…"
msgstr "Deskribapena sortzen. Itxaron…" msgstr "Deskribapena sortzen. Itxaron…"
#. placeholder {12}: e.message #. placeholder {12}: e.message
#: src/components/compose.jsx:2621 #: src/components/compose.jsx:2653
msgid "Failed to generate description: {12}" msgid "Failed to generate description: {12}"
msgstr "Ezin da deskribapena sortu: {12}" msgstr "Ezin da deskribapena sortu: {12}"
#: src/components/compose.jsx:2622 #: src/components/compose.jsx:2654
msgid "Failed to generate description" msgid "Failed to generate description"
msgstr "Ezin da deskribapena sortu" msgstr "Ezin da deskribapena sortu"
#: src/components/compose.jsx:2634 #: src/components/compose.jsx:2666
#: src/components/compose.jsx:2640 #: src/components/compose.jsx:2672
#: src/components/compose.jsx:2686 #: src/components/compose.jsx:2718
msgid "Generate description…" msgid "Generate description…"
msgstr "Sortu deskribapena…" msgstr "Sortu deskribapena…"
#. placeholder {13}: e?.message ? `: ${e.message}` : '' #. placeholder {13}: e?.message ? `: ${e.message}` : ''
#: src/components/compose.jsx:2673 #: src/components/compose.jsx:2705
msgid "Failed to generate description{13}" msgid "Failed to generate description{13}"
msgstr "Ezin izan da deskribapena sortu{13}" msgstr "Ezin izan da deskribapena sortu{13}"
#. placeholder {0}: localeCode2Text(lang) #. placeholder {0}: localeCode2Text(lang)
#: src/components/compose.jsx:2688 #: src/components/compose.jsx:2720
msgid "({0}) <0>— experimental</0>" msgid "({0}) <0>— experimental</0>"
msgstr "({0}) <0>— esperimentala</0>" msgstr "({0}) <0>— esperimentala</0>"
#: src/components/compose.jsx:2707 #: src/components/compose.jsx:2739
msgid "Done" msgid "Done"
msgstr "Eginda" msgstr "Eginda"
#. placeholder {0}: i + 1 #. placeholder {0}: i + 1
#: src/components/compose.jsx:2743 #: src/components/compose.jsx:2775
msgid "Choice {0}" msgid "Choice {0}"
msgstr "{0}. aukera" msgstr "{0}. aukera"
#: src/components/compose.jsx:2790 #: src/components/compose.jsx:2822
msgid "Multiple choices" msgid "Multiple choices"
msgstr "Hainbat aukera" msgstr "Hainbat aukera"
#: src/components/compose.jsx:2793 #: src/components/compose.jsx:2825
msgid "Duration" msgid "Duration"
msgstr "Iraupena" msgstr "Iraupena"
#: src/components/compose.jsx:2824 #: src/components/compose.jsx:2856
msgid "Remove poll" msgid "Remove poll"
msgstr "Kendu bozketa" msgstr "Kendu bozketa"
#: src/components/compose.jsx:3039 #: src/components/compose.jsx:3071
msgid "Search accounts" msgid "Search accounts"
msgstr "Bilatu kontuak" msgstr "Bilatu kontuak"
#: src/components/compose.jsx:3093 #: src/components/compose.jsx:3125
#: src/components/generic-accounts.jsx:228 #: src/components/generic-accounts.jsx:228
msgid "Error loading accounts" msgid "Error loading accounts"
msgstr "Errorea kontuak kargatzean" msgstr "Errorea kontuak kargatzean"
#: src/components/compose.jsx:3237 #: src/components/compose.jsx:3269
msgid "Custom emojis" msgid "Custom emojis"
msgstr "Instantziako emojiak" msgstr "Instantziako emojiak"
#: src/components/compose.jsx:3257 #: src/components/compose.jsx:3289
msgid "Search emoji" msgid "Search emoji"
msgstr "Bilatu emojia" msgstr "Bilatu emojia"
#: src/components/compose.jsx:3288 #: src/components/compose.jsx:3320
msgid "Error loading custom emojis" msgid "Error loading custom emojis"
msgstr "Errorea emoji pertsonalizatua kargatzean" msgstr "Errorea emoji pertsonalizatua kargatzean"
#: src/components/compose.jsx:3299 #: src/components/compose.jsx:3331
msgid "Recently used" msgid "Recently used"
msgstr "Oraintsu erabilita" msgstr "Oraintsu erabilita"
#: src/components/compose.jsx:3300 #: src/components/compose.jsx:3332
msgid "Others" msgid "Others"
msgstr "Besteak" msgstr "Besteak"
#. placeholder {0}: i18n.number(emojis.length - max) #. placeholder {0}: i18n.number(emojis.length - max)
#: src/components/compose.jsx:3338 #: src/components/compose.jsx:3370
msgid "{0} more…" msgid "{0} more…"
msgstr "{0} gehiago…" msgstr "{0} gehiago…"
#: src/components/compose.jsx:3476 #: src/components/compose.jsx:3508
msgid "Search GIFs" msgid "Search GIFs"
msgstr "Bilatu GIFak" msgstr "Bilatu GIFak"
#: src/components/compose.jsx:3491 #: src/components/compose.jsx:3523
msgid "Powered by GIPHY" msgid "Powered by GIPHY"
msgstr "GIPHYri esker" msgstr "GIPHYri esker"
#: src/components/compose.jsx:3499 #: src/components/compose.jsx:3531
msgid "Type to search GIFs" msgid "Type to search GIFs"
msgstr "Idatzi GIFak bilatzeko" msgstr "Idatzi GIFak bilatzeko"
#: src/components/compose.jsx:3597 #: src/components/compose.jsx:3629
#: src/components/media-modal.jsx:462 #: src/components/media-modal.jsx:462
#: src/components/timeline.jsx:893 #: src/components/timeline.jsx:893
msgid "Previous" msgid "Previous"
msgstr "Aurrekoa" msgstr "Aurrekoa"
#: src/components/compose.jsx:3615 #: src/components/compose.jsx:3647
#: src/components/media-modal.jsx:481 #: src/components/media-modal.jsx:481
#: src/components/timeline.jsx:910 #: src/components/timeline.jsx:910
msgid "Next" msgid "Next"
msgstr "Hurrengoa" msgstr "Hurrengoa"
#: src/components/compose.jsx:3632 #: src/components/compose.jsx:3664
msgid "Error loading GIFs" msgid "Error loading GIFs"
msgstr "Errorea GIFak kargatzean" msgstr "Errorea GIFak kargatzean"
@ -1410,6 +1410,7 @@ msgid "Accounts…"
msgstr "Kontuak…" msgstr "Kontuak…"
#: src/components/nav-menu.jsx:315 #: src/components/nav-menu.jsx:315
#: src/pages/login.jsx:27
#: src/pages/login.jsx:190 #: src/pages/login.jsx:190
#: src/pages/status.jsx:837 #: src/pages/status.jsx:837
#: src/pages/welcome.jsx:65 #: src/pages/welcome.jsx:65
@ -1656,7 +1657,7 @@ msgstr "{votersCount, plural, one {hautesle <0>{0}</0>} other {<1>{1}</1> hautes
#: src/components/poll.jsx:268 #: src/components/poll.jsx:268
msgid "Ended <0/>" msgid "Ended <0/>"
msgstr "<0/>(e)an amaitu zen" msgstr "<0/> amaitu da"
#: src/components/poll.jsx:272 #: src/components/poll.jsx:272
msgid "Ended" msgid "Ended"
@ -1664,7 +1665,7 @@ msgstr "Amaitu da"
#: src/components/poll.jsx:275 #: src/components/poll.jsx:275
msgid "Ending <0/>" msgid "Ending <0/>"
msgstr "<0/>(e)an amaituko da" msgstr "<0/> amaituko da"
#: src/components/poll.jsx:279 #: src/components/poll.jsx:279
msgid "Ending" msgid "Ending"

109
src/locales/pt-BR.po generated
View file

@ -8,7 +8,7 @@ msgstr ""
"Language: pt\n" "Language: pt\n"
"Project-Id-Version: phanpy\n" "Project-Id-Version: phanpy\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-12-22 00:30\n" "PO-Revision-Date: 2025-01-15 16:00\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Portuguese, Brazilian\n" "Language-Team: Portuguese, Brazilian\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
@ -76,7 +76,7 @@ msgstr "Verificado"
#: src/components/account-block.jsx:223 #: src/components/account-block.jsx:223
#: src/components/account-info.jsx:782 #: src/components/account-info.jsx:782
msgid "Joined <0>{0}</0>" msgid "Joined <0>{0}</0>"
msgstr "Se juntou em <0>{0}</0>" msgstr "Juntou-se em <0>{0}</0>"
#: src/components/account-info.jsx:58 #: src/components/account-info.jsx:58
msgid "Forever" msgid "Forever"
@ -113,7 +113,7 @@ msgstr "Publicações"
#: src/components/account-info.jsx:429 #: src/components/account-info.jsx:429
#: src/components/account-info.jsx:1120 #: src/components/account-info.jsx:1120
#: src/components/compose.jsx:2592 #: src/components/compose.jsx:2624
#: src/components/media-alt-modal.jsx:46 #: src/components/media-alt-modal.jsx:46
#: src/components/media-modal.jsx:358 #: src/components/media-modal.jsx:358
#: src/components/status.jsx:1737 #: src/components/status.jsx:1737
@ -169,7 +169,7 @@ msgstr "Em memória"
#: src/components/account-info.jsx:711 #: src/components/account-info.jsx:711
#: src/components/account-info.jsx:752 #: src/components/account-info.jsx:752
msgid "This user has chosen to not make this information available." msgid "This user has chosen to not make this information available."
msgstr "Esse usuário decidiu não fazer esta informação visível." msgstr "O usuário deixou privado esta informação."
#. placeholder {0}: ( postingStats.originals / postingStats.total ).toLocaleString(i18n.locale || undefined, { style: 'percent', }) #. placeholder {0}: ( postingStats.originals / postingStats.total ).toLocaleString(i18n.locale || undefined, { style: 'percent', })
#. placeholder {1}: ( postingStats.replies / postingStats.total ).toLocaleString(i18n.locale || undefined, { style: 'percent', }) #. placeholder {1}: ( postingStats.replies / postingStats.total ).toLocaleString(i18n.locale || undefined, { style: 'percent', })
@ -424,10 +424,10 @@ msgstr "Seguir"
#: src/components/account-info.jsx:2098 #: src/components/account-info.jsx:2098
#: src/components/account-sheet.jsx:38 #: src/components/account-sheet.jsx:38
#: src/components/compose.jsx:859 #: src/components/compose.jsx:859
#: src/components/compose.jsx:2548 #: src/components/compose.jsx:2580
#: src/components/compose.jsx:3022 #: src/components/compose.jsx:3054
#: src/components/compose.jsx:3231 #: src/components/compose.jsx:3263
#: src/components/compose.jsx:3461 #: src/components/compose.jsx:3493
#: src/components/drafts.jsx:59 #: src/components/drafts.jsx:59
#: src/components/embed-modal.jsx:13 #: src/components/embed-modal.jsx:13
#: src/components/generic-accounts.jsx:143 #: src/components/generic-accounts.jsx:143
@ -711,7 +711,7 @@ msgid "Mark media as sensitive"
msgstr "Marcar mídia como sensível" msgstr "Marcar mídia como sensível"
#: src/components/compose.jsx:1381 #: src/components/compose.jsx:1381
#: src/components/compose.jsx:3080 #: src/components/compose.jsx:3112
#: src/components/shortcuts-settings.jsx:715 #: src/components/shortcuts-settings.jsx:715
#: src/pages/list.jsx:362 #: src/pages/list.jsx:362
msgid "Add" msgid "Add"
@ -743,31 +743,31 @@ msgstr "Baixando GIF…"
msgid "Failed to download GIF" msgid "Failed to download GIF"
msgstr "Houve um erro ao baixar GIF" msgstr "Houve um erro ao baixar GIF"
#: src/components/compose.jsx:1879 #: src/components/compose.jsx:1884
#: src/components/compose.jsx:1956 #: src/components/compose.jsx:1961
#: src/components/nav-menu.jsx:239 #: src/components/nav-menu.jsx:239
msgid "More…" msgid "More…"
msgstr "Mais…" msgstr "Mais…"
#: src/components/compose.jsx:2361 #: src/components/compose.jsx:2393
msgid "Uploaded" msgid "Uploaded"
msgstr "Enviado" msgstr "Enviado"
#: src/components/compose.jsx:2374 #: src/components/compose.jsx:2406
msgid "Image description" msgid "Image description"
msgstr "Descrição da imagem" msgstr "Descrição da imagem"
#: src/components/compose.jsx:2375 #: src/components/compose.jsx:2407
msgid "Video description" msgid "Video description"
msgstr "Descrição do vídeo" msgstr "Descrição do vídeo"
#: src/components/compose.jsx:2376 #: src/components/compose.jsx:2408
msgid "Audio description" msgid "Audio description"
msgstr "Descrição do áudio" msgstr "Descrição do áudio"
#. placeholder {0}: prettyBytes( imageSize, ) #. placeholder {0}: prettyBytes( imageSize, )
#. placeholder {1}: prettyBytes(imageSizeLimit) #. placeholder {1}: prettyBytes(imageSizeLimit)
#: src/components/compose.jsx:2412 #: src/components/compose.jsx:2444
msgid "File size too large. Uploading might encounter issues. Try reduce the file size from {0} to {1} or lower." msgid "File size too large. Uploading might encounter issues. Try reduce the file size from {0} to {1} or lower."
msgstr "O arquivo é muito grande. Enviá-lo pode enfrentar problemas. Reduza o tamanho do arquivo de {0} a {1} ou menor." msgstr "O arquivo é muito grande. Enviá-lo pode enfrentar problemas. Reduza o tamanho do arquivo de {0} a {1} ou menor."
@ -775,13 +775,13 @@ msgstr "O arquivo é muito grande. Enviá-lo pode enfrentar problemas. Reduza o
#. placeholder {3}: i18n.number(height) #. placeholder {3}: i18n.number(height)
#. placeholder {4}: i18n.number(newWidth) #. placeholder {4}: i18n.number(newWidth)
#. placeholder {5}: i18n.number( newHeight, ) #. placeholder {5}: i18n.number( newHeight, )
#: src/components/compose.jsx:2424 #: src/components/compose.jsx:2456
msgid "Dimension too large. Uploading might encounter issues. Try reduce dimension from {2}×{3}px to {4}×{5}px." msgid "Dimension too large. Uploading might encounter issues. Try reduce dimension from {2}×{3}px to {4}×{5}px."
msgstr "A dimensão é muito grande. Enviá-lo pode enfrentar problemas. Reduza a dimensão de {2}×{3}px a {4}×{5}px." msgstr "A dimensão é muito grande. Enviá-lo pode enfrentar problemas. Reduza a dimensão de {2}×{3}px a {4}×{5}px."
#. placeholder {6}: prettyBytes( videoSize, ) #. placeholder {6}: prettyBytes( videoSize, )
#. placeholder {7}: prettyBytes(videoSizeLimit) #. placeholder {7}: prettyBytes(videoSizeLimit)
#: src/components/compose.jsx:2432 #: src/components/compose.jsx:2464
msgid "File size too large. Uploading might encounter issues. Try reduce the file size from {6} to {7} or lower." msgid "File size too large. Uploading might encounter issues. Try reduce the file size from {6} to {7} or lower."
msgstr "O arquivo é muito grande. Enviá-lo pode enfrentar problemas. Reduza o tamanho do arquivo de {6} a {7} ou menor." msgstr "O arquivo é muito grande. Enviá-lo pode enfrentar problemas. Reduza o tamanho do arquivo de {6} a {7} ou menor."
@ -789,149 +789,149 @@ msgstr "O arquivo é muito grande. Enviá-lo pode enfrentar problemas. Reduza o
#. placeholder {9}: i18n.number(height) #. placeholder {9}: i18n.number(height)
#. placeholder {10}: i18n.number(newWidth) #. placeholder {10}: i18n.number(newWidth)
#. placeholder {11}: i18n.number( newHeight, ) #. placeholder {11}: i18n.number( newHeight, )
#: src/components/compose.jsx:2444 #: src/components/compose.jsx:2476
msgid "Dimension too large. Uploading might encounter issues. Try reduce dimension from {8}×{9}px to {10}×{11}px." msgid "Dimension too large. Uploading might encounter issues. Try reduce dimension from {8}×{9}px to {10}×{11}px."
msgstr "A dimensão é muito grande. Enviá-lo pode enfrentar problemas. Reduza a dimensão de {8}×{9}px a {10}×{11}px." msgstr "A dimensão é muito grande. Enviá-lo pode enfrentar problemas. Reduza a dimensão de {8}×{9}px a {10}×{11}px."
#: src/components/compose.jsx:2452 #: src/components/compose.jsx:2484
msgid "Frame rate too high. Uploading might encounter issues." msgid "Frame rate too high. Uploading might encounter issues."
msgstr "A taxa de quadros está muito alta. Enviá-lo pode enfrentar problemas." msgstr "A taxa de quadros está muito alta. Enviá-lo pode enfrentar problemas."
#: src/components/compose.jsx:2512 #: src/components/compose.jsx:2544
#: src/components/compose.jsx:2762 #: src/components/compose.jsx:2794
#: src/components/shortcuts-settings.jsx:726 #: src/components/shortcuts-settings.jsx:726
#: src/pages/catchup.jsx:1074 #: src/pages/catchup.jsx:1074
#: src/pages/filters.jsx:412 #: src/pages/filters.jsx:412
msgid "Remove" msgid "Remove"
msgstr "Excluir" msgstr "Excluir"
#: src/components/compose.jsx:2529 #: src/components/compose.jsx:2561
#: src/compose.jsx:84 #: src/compose.jsx:84
msgid "Error" msgid "Error"
msgstr "Erro" msgstr "Erro"
#: src/components/compose.jsx:2554 #: src/components/compose.jsx:2586
msgid "Edit image description" msgid "Edit image description"
msgstr "Editar descrição da imagem" msgstr "Editar descrição da imagem"
#: src/components/compose.jsx:2555 #: src/components/compose.jsx:2587
msgid "Edit video description" msgid "Edit video description"
msgstr "Editar descrição do vídeo" msgstr "Editar descrição do vídeo"
#: src/components/compose.jsx:2556 #: src/components/compose.jsx:2588
msgid "Edit audio description" msgid "Edit audio description"
msgstr "Editar descrição do áudio" msgstr "Editar descrição do áudio"
#: src/components/compose.jsx:2601 #: src/components/compose.jsx:2633
#: src/components/compose.jsx:2650 #: src/components/compose.jsx:2682
msgid "Generating description. Please wait…" msgid "Generating description. Please wait…"
msgstr "Gerando descrição. Por favor, espere…" msgstr "Gerando descrição. Por favor, espere…"
#. placeholder {12}: e.message #. placeholder {12}: e.message
#: src/components/compose.jsx:2621 #: src/components/compose.jsx:2653
msgid "Failed to generate description: {12}" msgid "Failed to generate description: {12}"
msgstr "Falhou ao gerar descrição: {12}" msgstr "Falhou ao gerar descrição: {12}"
#: src/components/compose.jsx:2622 #: src/components/compose.jsx:2654
msgid "Failed to generate description" msgid "Failed to generate description"
msgstr "Houve um erro ao gerar descrição" msgstr "Houve um erro ao gerar descrição"
#: src/components/compose.jsx:2634 #: src/components/compose.jsx:2666
#: src/components/compose.jsx:2640 #: src/components/compose.jsx:2672
#: src/components/compose.jsx:2686 #: src/components/compose.jsx:2718
msgid "Generate description…" msgid "Generate description…"
msgstr "Gerar descrição…" msgstr "Gerar descrição…"
#. placeholder {13}: e?.message ? `: ${e.message}` : '' #. placeholder {13}: e?.message ? `: ${e.message}` : ''
#: src/components/compose.jsx:2673 #: src/components/compose.jsx:2705
msgid "Failed to generate description{13}" msgid "Failed to generate description{13}"
msgstr "Falhou ao gerar descrição{13}" msgstr "Falhou ao gerar descrição{13}"
#. placeholder {0}: localeCode2Text(lang) #. placeholder {0}: localeCode2Text(lang)
#: src/components/compose.jsx:2688 #: src/components/compose.jsx:2720
msgid "({0}) <0>— experimental</0>" msgid "({0}) <0>— experimental</0>"
msgstr "({0}) <0>— experimental</0>" msgstr "({0}) <0>— experimental</0>"
#: src/components/compose.jsx:2707 #: src/components/compose.jsx:2739
msgid "Done" msgid "Done"
msgstr "Concluído" msgstr "Concluído"
#. placeholder {0}: i + 1 #. placeholder {0}: i + 1
#: src/components/compose.jsx:2743 #: src/components/compose.jsx:2775
msgid "Choice {0}" msgid "Choice {0}"
msgstr "Escolha {0}" msgstr "Escolha {0}"
#: src/components/compose.jsx:2790 #: src/components/compose.jsx:2822
msgid "Multiple choices" msgid "Multiple choices"
msgstr "Várias escolhas" msgstr "Várias escolhas"
#: src/components/compose.jsx:2793 #: src/components/compose.jsx:2825
msgid "Duration" msgid "Duration"
msgstr "Duração" msgstr "Duração"
#: src/components/compose.jsx:2824 #: src/components/compose.jsx:2856
msgid "Remove poll" msgid "Remove poll"
msgstr "Excluir enquete" msgstr "Excluir enquete"
#: src/components/compose.jsx:3039 #: src/components/compose.jsx:3071
msgid "Search accounts" msgid "Search accounts"
msgstr "Procurar contas" msgstr "Procurar contas"
#: src/components/compose.jsx:3093 #: src/components/compose.jsx:3125
#: src/components/generic-accounts.jsx:228 #: src/components/generic-accounts.jsx:228
msgid "Error loading accounts" msgid "Error loading accounts"
msgstr "Erro ao carregar contas" msgstr "Erro ao carregar contas"
#: src/components/compose.jsx:3237 #: src/components/compose.jsx:3269
msgid "Custom emojis" msgid "Custom emojis"
msgstr "Emojis personalizados" msgstr "Emojis personalizados"
#: src/components/compose.jsx:3257 #: src/components/compose.jsx:3289
msgid "Search emoji" msgid "Search emoji"
msgstr "Procurar emoji" msgstr "Procurar emoji"
#: src/components/compose.jsx:3288 #: src/components/compose.jsx:3320
msgid "Error loading custom emojis" msgid "Error loading custom emojis"
msgstr "Erro ao carregar emojis personalizados" msgstr "Erro ao carregar emojis personalizados"
#: src/components/compose.jsx:3299 #: src/components/compose.jsx:3331
msgid "Recently used" msgid "Recently used"
msgstr "Usado recentemente" msgstr "Usado recentemente"
#: src/components/compose.jsx:3300 #: src/components/compose.jsx:3332
msgid "Others" msgid "Others"
msgstr "Outros" msgstr "Outros"
#. placeholder {0}: i18n.number(emojis.length - max) #. placeholder {0}: i18n.number(emojis.length - max)
#: src/components/compose.jsx:3338 #: src/components/compose.jsx:3370
msgid "{0} more…" msgid "{0} more…"
msgstr "{0} mais…" msgstr "{0} mais…"
#: src/components/compose.jsx:3476 #: src/components/compose.jsx:3508
msgid "Search GIFs" msgid "Search GIFs"
msgstr "Procurar GIFs" msgstr "Procurar GIFs"
#: src/components/compose.jsx:3491 #: src/components/compose.jsx:3523
msgid "Powered by GIPHY" msgid "Powered by GIPHY"
msgstr "Desenvolvido por GIPHY" msgstr "Desenvolvido por GIPHY"
#: src/components/compose.jsx:3499 #: src/components/compose.jsx:3531
msgid "Type to search GIFs" msgid "Type to search GIFs"
msgstr "Escreva para pesquisar GIFs" msgstr "Escreva para pesquisar GIFs"
#: src/components/compose.jsx:3597 #: src/components/compose.jsx:3629
#: src/components/media-modal.jsx:462 #: src/components/media-modal.jsx:462
#: src/components/timeline.jsx:893 #: src/components/timeline.jsx:893
msgid "Previous" msgid "Previous"
msgstr "Anterior" msgstr "Anterior"
#: src/components/compose.jsx:3615 #: src/components/compose.jsx:3647
#: src/components/media-modal.jsx:481 #: src/components/media-modal.jsx:481
#: src/components/timeline.jsx:910 #: src/components/timeline.jsx:910
msgid "Next" msgid "Next"
msgstr "Seguinte" msgstr "Seguinte"
#: src/components/compose.jsx:3632 #: src/components/compose.jsx:3664
msgid "Error loading GIFs" msgid "Error loading GIFs"
msgstr "Erro ao carregar GIFs" msgstr "Erro ao carregar GIFs"
@ -1410,6 +1410,7 @@ msgid "Accounts…"
msgstr "Contas…" msgstr "Contas…"
#: src/components/nav-menu.jsx:315 #: src/components/nav-menu.jsx:315
#: src/pages/login.jsx:27
#: src/pages/login.jsx:190 #: src/pages/login.jsx:190
#: src/pages/status.jsx:837 #: src/pages/status.jsx:837
#: src/pages/welcome.jsx:65 #: src/pages/welcome.jsx:65

191
src/locales/pt-PT.po generated
View file

@ -8,7 +8,7 @@ msgstr ""
"Language: pt\n" "Language: pt\n"
"Project-Id-Version: phanpy\n" "Project-Id-Version: phanpy\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-12-22 00:30\n" "PO-Revision-Date: 2025-01-15 16:00\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Portuguese\n" "Language-Team: Portuguese\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
@ -25,7 +25,7 @@ msgstr "Bloqueado"
#. placeholder {0}: shortenNumber(statusesCount) #. placeholder {0}: shortenNumber(statusesCount)
#: src/components/account-block.jsx:142 #: src/components/account-block.jsx:142
msgid "Posts: {0}" msgid "Posts: {0}"
msgstr "Publicações: {0}" msgstr "Postagens: {0}"
#. placeholder {0}: niceDateTime(lastStatusAt, { hideTime: true, }) #. placeholder {0}: niceDateTime(lastStatusAt, { hideTime: true, })
#: src/components/account-block.jsx:147 #: src/components/account-block.jsx:147
@ -76,7 +76,7 @@ msgstr "Verificado"
#: src/components/account-block.jsx:223 #: src/components/account-block.jsx:223
#: src/components/account-info.jsx:782 #: src/components/account-info.jsx:782
msgid "Joined <0>{0}</0>" msgid "Joined <0>{0}</0>"
msgstr "Se juntou em <0>{0}</0>" msgstr "Juntou-se em <0>{0}</0>"
#: src/components/account-info.jsx:58 #: src/components/account-info.jsx:58
msgid "Forever" msgid "Forever"
@ -109,11 +109,11 @@ msgstr "A seguir"
#: src/pages/search.jsx:328 #: src/pages/search.jsx:328
#: src/pages/search.jsx:475 #: src/pages/search.jsx:475
msgid "Posts" msgid "Posts"
msgstr "Publicações" msgstr "Postagens"
#: src/components/account-info.jsx:429 #: src/components/account-info.jsx:429
#: src/components/account-info.jsx:1120 #: src/components/account-info.jsx:1120
#: src/components/compose.jsx:2592 #: src/components/compose.jsx:2624
#: src/components/media-alt-modal.jsx:46 #: src/components/media-alt-modal.jsx:46
#: src/components/media-modal.jsx:358 #: src/components/media-modal.jsx:358
#: src/components/status.jsx:1737 #: src/components/status.jsx:1737
@ -133,7 +133,7 @@ msgstr "Mais"
#: src/components/account-info.jsx:441 #: src/components/account-info.jsx:441
msgid "<0>{displayName}</0> has indicated that their new account is now:" msgid "<0>{displayName}</0> has indicated that their new account is now:"
msgstr "<0>{displayName}</0> indicou que a nova conta é:" msgstr "A nova conta de <0>{displayName}</0> é:"
#: src/components/account-info.jsx:586 #: src/components/account-info.jsx:586
#: src/components/account-info.jsx:1278 #: src/components/account-info.jsx:1278
@ -169,14 +169,14 @@ msgstr "Em memória"
#: src/components/account-info.jsx:711 #: src/components/account-info.jsx:711
#: src/components/account-info.jsx:752 #: src/components/account-info.jsx:752
msgid "This user has chosen to not make this information available." msgid "This user has chosen to not make this information available."
msgstr "Este utilizador decidiu não fazer esta informação visível." msgstr "O utilizador deixou privado esta informação."
#. placeholder {0}: ( postingStats.originals / postingStats.total ).toLocaleString(i18n.locale || undefined, { style: 'percent', }) #. placeholder {0}: ( postingStats.originals / postingStats.total ).toLocaleString(i18n.locale || undefined, { style: 'percent', })
#. placeholder {1}: ( postingStats.replies / postingStats.total ).toLocaleString(i18n.locale || undefined, { style: 'percent', }) #. placeholder {1}: ( postingStats.replies / postingStats.total ).toLocaleString(i18n.locale || undefined, { style: 'percent', })
#. placeholder {2}: ( postingStats.boosts / postingStats.total ).toLocaleString(i18n.locale || undefined, { style: 'percent', }) #. placeholder {2}: ( postingStats.boosts / postingStats.total ).toLocaleString(i18n.locale || undefined, { style: 'percent', })
#: src/components/account-info.jsx:807 #: src/components/account-info.jsx:807
msgid "{0} original posts, {1} replies, {2} boosts" msgid "{0} original posts, {1} replies, {2} boosts"
msgstr "{0} publicações originais, {1} respostas, {2} impulsos" msgstr "{0} postagens originais, {1} respostas, {2} impulsos"
#. placeholder {0}: postingStats.total #. placeholder {0}: postingStats.total
#. placeholder {1}: postingStats.daysSinceLastPost #. placeholder {1}: postingStats.daysSinceLastPost
@ -187,13 +187,13 @@ msgstr "{0} publicações originais, {1} respostas, {2} impulsos"
#. placeholder {6}: postingStats.daysSinceLastPost #. placeholder {6}: postingStats.daysSinceLastPost
#: src/components/account-info.jsx:823 #: src/components/account-info.jsx:823
msgid "{0, plural, one {{1, plural, one {Last 1 post in the past 1 day} other {Last 1 post in the past {2} days}}} other {{3, plural, one {Last {4} posts in the past 1 day} other {Last {5} posts in the past {6} days}}}}" msgid "{0, plural, one {{1, plural, one {Last 1 post in the past 1 day} other {Last 1 post in the past {2} days}}} other {{3, plural, one {Last {4} posts in the past 1 day} other {Last {5} posts in the past {6} days}}}}"
msgstr "{0, plural, one {{1, plural, one {Última publicação no último dia} other {Última publicação nos últimos {2} dias}}} other {{3, plural, one {Últimas {4} publicações no último dia} other {Últimas {5} publicações nos últimos {6} dias}}}}" msgstr "{0, plural, one {{1, plural, one {Última postagem no último dia} other {Última postagem nos últimos {2} dias}}} other {{3, plural, one {Últimas {4} postagens no último dia} other {Últimas {5} postagens nos últimos {6} dias}}}}"
#. placeholder {0}: postingStats.total #. placeholder {0}: postingStats.total
#. placeholder {1}: postingStats.total #. placeholder {1}: postingStats.total
#: src/components/account-info.jsx:836 #: src/components/account-info.jsx:836
msgid "{0, plural, one {Last 1 post in the past year(s)} other {Last {1} posts in the past year(s)}}" msgid "{0, plural, one {Last 1 post in the past year(s)} other {Last {1} posts in the past year(s)}}"
msgstr "{0, plural, one {Última publicação no(s) ano(s) passado(s)} other {Últimas {1} publicações no(s) ano(s) passado(s)}}" msgstr "{0, plural, one {Última postagem no(s) ano(s) passado(s)} other {Últimas {1} postagens no(s) ano(s) passado(s)}}"
#: src/components/account-info.jsx:860 #: src/components/account-info.jsx:860
#: src/pages/catchup.jsx:70 #: src/pages/catchup.jsx:70
@ -220,7 +220,7 @@ msgstr "Impulsos"
#: src/components/account-info.jsx:874 #: src/components/account-info.jsx:874
msgid "Post stats unavailable." msgid "Post stats unavailable."
msgstr "As estatísticas estão indisponíveis." msgstr "Estatísticas da publicação indisponíveis."
#: src/components/account-info.jsx:905 #: src/components/account-info.jsx:905
msgid "View post stats" msgid "View post stats"
@ -261,11 +261,11 @@ msgstr "Adicionar nota privada"
#: src/components/account-info.jsx:1196 #: src/components/account-info.jsx:1196
msgid "Notifications enabled for @{username}'s posts." msgid "Notifications enabled for @{username}'s posts."
msgstr "Notificações ativadas para as publicações de @{username}." msgstr "Habilitado as notificações para postagens de @{username}."
#: src/components/account-info.jsx:1197 #: src/components/account-info.jsx:1197
msgid " Notifications disabled for @{username}'s posts." msgid " Notifications disabled for @{username}'s posts."
msgstr " Notificações desativadas para as publicações de @{username}." msgstr " Desabilitado as notificações de postagens de @{username}."
#: src/components/account-info.jsx:1209 #: src/components/account-info.jsx:1209
msgid "Disable notifications" msgid "Disable notifications"
@ -397,7 +397,7 @@ msgstr "Editar perfil"
#: src/components/account-info.jsx:1624 #: src/components/account-info.jsx:1624
msgid "Withdraw follow request?" msgid "Withdraw follow request?"
msgstr "Eliminar pedido de seguimento?" msgstr "Eliminar pedido de seguir?"
#. placeholder {1}: info.acct || info.username #. placeholder {1}: info.acct || info.username
#: src/components/account-info.jsx:1625 #: src/components/account-info.jsx:1625
@ -424,10 +424,10 @@ msgstr "Seguir"
#: src/components/account-info.jsx:2098 #: src/components/account-info.jsx:2098
#: src/components/account-sheet.jsx:38 #: src/components/account-sheet.jsx:38
#: src/components/compose.jsx:859 #: src/components/compose.jsx:859
#: src/components/compose.jsx:2548 #: src/components/compose.jsx:2580
#: src/components/compose.jsx:3022 #: src/components/compose.jsx:3054
#: src/components/compose.jsx:3231 #: src/components/compose.jsx:3263
#: src/components/compose.jsx:3461 #: src/components/compose.jsx:3493
#: src/components/drafts.jsx:59 #: src/components/drafts.jsx:59
#: src/components/embed-modal.jsx:13 #: src/components/embed-modal.jsx:13
#: src/components/generic-accounts.jsx:143 #: src/components/generic-accounts.jsx:143
@ -566,7 +566,7 @@ msgstr "Escrever"
#: src/components/compose.jsx:206 #: src/components/compose.jsx:206
msgid "Add media" msgid "Add media"
msgstr "Adicionar media" msgstr "Adicionar multimédia"
#: src/components/compose.jsx:207 #: src/components/compose.jsx:207
msgid "Add custom emoji" msgid "Add custom emoji"
@ -596,7 +596,7 @@ msgstr "{0, plural, one {O ficheiro {1} não é suportado.} other {Os ficheiros
#: src/components/compose.jsx:1674 #: src/components/compose.jsx:1674
#: src/components/compose.jsx:1760 #: src/components/compose.jsx:1760
msgid "{maxMediaAttachments, plural, one {You can only attach up to 1 file.} other {You can only attach up to # files.}}" msgid "{maxMediaAttachments, plural, one {You can only attach up to 1 file.} other {You can only attach up to # files.}}"
msgstr "{maxMediaAttachments, plural,one {Tu podes anexar até 1 ficheiro.} other {Tu podes anexar até # ficheiros.}}" msgstr "{maxMediaAttachments, plural,one {Só pode anexar até 1 ficheiro.} other {Só pode anexar até # ficheiros.}}"
#: src/components/compose.jsx:840 #: src/components/compose.jsx:840
msgid "Pop out" msgid "Pop out"
@ -647,7 +647,7 @@ msgstr "Algumas escolhas da enquete estão vazias"
#: src/components/compose.jsx:1034 #: src/components/compose.jsx:1034
msgid "Some media have no descriptions. Continue?" msgid "Some media have no descriptions. Continue?"
msgstr "Algumas das medias não têm descrição. Prosseguir?" msgstr "Algumas multimédias não possuem descrições. Prosseguir?"
#: src/components/compose.jsx:1086 #: src/components/compose.jsx:1086
msgid "Attachment #{i} failed" msgid "Attachment #{i} failed"
@ -661,7 +661,7 @@ msgstr "Alerta de conteúdo"
#: src/components/compose.jsx:1196 #: src/components/compose.jsx:1196
msgid "Content warning or sensitive media" msgid "Content warning or sensitive media"
msgstr "Alerta de conteúdo ou media sensível" msgstr "Alerta de conteúdo ou multimédia sensível"
#: src/components/compose.jsx:1232 #: src/components/compose.jsx:1232
#: src/components/status.jsx:93 #: src/components/status.jsx:93
@ -704,14 +704,14 @@ msgstr "Editar publicação"
#: src/components/compose.jsx:1259 #: src/components/compose.jsx:1259
msgid "What are you doing?" msgid "What are you doing?"
msgstr "O que tu fazes?" msgstr "O que faz?"
#: src/components/compose.jsx:1337 #: src/components/compose.jsx:1337
msgid "Mark media as sensitive" msgid "Mark media as sensitive"
msgstr "Marcar media como sensível" msgstr "Marcar multimédia como sensível"
#: src/components/compose.jsx:1381 #: src/components/compose.jsx:1381
#: src/components/compose.jsx:3080 #: src/components/compose.jsx:3112
#: src/components/shortcuts-settings.jsx:715 #: src/components/shortcuts-settings.jsx:715
#: src/pages/list.jsx:362 #: src/pages/list.jsx:362
msgid "Add" msgid "Add"
@ -743,31 +743,31 @@ msgstr "A transferir GIF…"
msgid "Failed to download GIF" msgid "Failed to download GIF"
msgstr "Falhou ao transferir GIF" msgstr "Falhou ao transferir GIF"
#: src/components/compose.jsx:1879 #: src/components/compose.jsx:1884
#: src/components/compose.jsx:1956 #: src/components/compose.jsx:1961
#: src/components/nav-menu.jsx:239 #: src/components/nav-menu.jsx:239
msgid "More…" msgid "More…"
msgstr "Mais…" msgstr "Mais…"
#: src/components/compose.jsx:2361 #: src/components/compose.jsx:2393
msgid "Uploaded" msgid "Uploaded"
msgstr "Enviado" msgstr "Enviado"
#: src/components/compose.jsx:2374 #: src/components/compose.jsx:2406
msgid "Image description" msgid "Image description"
msgstr "Descrição da imagem" msgstr "Descrição da imagem"
#: src/components/compose.jsx:2375 #: src/components/compose.jsx:2407
msgid "Video description" msgid "Video description"
msgstr "Descrição do vídeo" msgstr "Descrição do vídeo"
#: src/components/compose.jsx:2376 #: src/components/compose.jsx:2408
msgid "Audio description" msgid "Audio description"
msgstr "Descrição do áudio" msgstr "Descrição do áudio"
#. placeholder {0}: prettyBytes( imageSize, ) #. placeholder {0}: prettyBytes( imageSize, )
#. placeholder {1}: prettyBytes(imageSizeLimit) #. placeholder {1}: prettyBytes(imageSizeLimit)
#: src/components/compose.jsx:2412 #: src/components/compose.jsx:2444
msgid "File size too large. Uploading might encounter issues. Try reduce the file size from {0} to {1} or lower." msgid "File size too large. Uploading might encounter issues. Try reduce the file size from {0} to {1} or lower."
msgstr "O ficheiro é muito grande. Ao enviar pode enfrentar problemas. Tenta reduzir o tamanho de {0} a {1} ou mais baixo." msgstr "O ficheiro é muito grande. Ao enviar pode enfrentar problemas. Tenta reduzir o tamanho de {0} a {1} ou mais baixo."
@ -775,13 +775,13 @@ msgstr "O ficheiro é muito grande. Ao enviar pode enfrentar problemas. Tenta re
#. placeholder {3}: i18n.number(height) #. placeholder {3}: i18n.number(height)
#. placeholder {4}: i18n.number(newWidth) #. placeholder {4}: i18n.number(newWidth)
#. placeholder {5}: i18n.number( newHeight, ) #. placeholder {5}: i18n.number( newHeight, )
#: src/components/compose.jsx:2424 #: src/components/compose.jsx:2456
msgid "Dimension too large. Uploading might encounter issues. Try reduce dimension from {2}×{3}px to {4}×{5}px." msgid "Dimension too large. Uploading might encounter issues. Try reduce dimension from {2}×{3}px to {4}×{5}px."
msgstr "A dimensão é muito grande. Ao enviar pode enfrentar problemas. Tenta reduzir a dimensão de {2}×{3}px para {4}×{5}px." msgstr "A dimensão é muito grande. Ao enviar pode enfrentar problemas. Tenta reduzir a dimensão de {2}×{3}px para {4}×{5}px."
#. placeholder {6}: prettyBytes( videoSize, ) #. placeholder {6}: prettyBytes( videoSize, )
#. placeholder {7}: prettyBytes(videoSizeLimit) #. placeholder {7}: prettyBytes(videoSizeLimit)
#: src/components/compose.jsx:2432 #: src/components/compose.jsx:2464
msgid "File size too large. Uploading might encounter issues. Try reduce the file size from {6} to {7} or lower." msgid "File size too large. Uploading might encounter issues. Try reduce the file size from {6} to {7} or lower."
msgstr "O ficheiro é muito grande. Ao enviar pode enfrentar problemas. Tenta reduzir o tamanho de {6} a {7} ou mais baixo." msgstr "O ficheiro é muito grande. Ao enviar pode enfrentar problemas. Tenta reduzir o tamanho de {6} a {7} ou mais baixo."
@ -789,149 +789,149 @@ msgstr "O ficheiro é muito grande. Ao enviar pode enfrentar problemas. Tenta re
#. placeholder {9}: i18n.number(height) #. placeholder {9}: i18n.number(height)
#. placeholder {10}: i18n.number(newWidth) #. placeholder {10}: i18n.number(newWidth)
#. placeholder {11}: i18n.number( newHeight, ) #. placeholder {11}: i18n.number( newHeight, )
#: src/components/compose.jsx:2444 #: src/components/compose.jsx:2476
msgid "Dimension too large. Uploading might encounter issues. Try reduce dimension from {8}×{9}px to {10}×{11}px." msgid "Dimension too large. Uploading might encounter issues. Try reduce dimension from {8}×{9}px to {10}×{11}px."
msgstr "A dimensão é muito grande. Ao enviar pode enfrentar problemas. Tenta reduzir a dimensão de {8}×{9}px para {10}×{11}px." msgstr "A dimensão é muito grande. Ao enviar pode enfrentar problemas. Tenta reduzir a dimensão de {8}×{9}px para {10}×{11}px."
#: src/components/compose.jsx:2452 #: src/components/compose.jsx:2484
msgid "Frame rate too high. Uploading might encounter issues." msgid "Frame rate too high. Uploading might encounter issues."
msgstr "A taxa de quadros está muito alta. Ao enviar pode enfrentar problemas." msgstr "A taxa de quadros está muito alta. Ao enviar pode enfrentar problemas."
#: src/components/compose.jsx:2512 #: src/components/compose.jsx:2544
#: src/components/compose.jsx:2762 #: src/components/compose.jsx:2794
#: src/components/shortcuts-settings.jsx:726 #: src/components/shortcuts-settings.jsx:726
#: src/pages/catchup.jsx:1074 #: src/pages/catchup.jsx:1074
#: src/pages/filters.jsx:412 #: src/pages/filters.jsx:412
msgid "Remove" msgid "Remove"
msgstr "Eliminar" msgstr "Eliminar"
#: src/components/compose.jsx:2529 #: src/components/compose.jsx:2561
#: src/compose.jsx:84 #: src/compose.jsx:84
msgid "Error" msgid "Error"
msgstr "Erro" msgstr "Erro"
#: src/components/compose.jsx:2554 #: src/components/compose.jsx:2586
msgid "Edit image description" msgid "Edit image description"
msgstr "Editar descrição da imagem" msgstr "Editar descrição da imagem"
#: src/components/compose.jsx:2555 #: src/components/compose.jsx:2587
msgid "Edit video description" msgid "Edit video description"
msgstr "Editar descrição do vídeo" msgstr "Editar descrição do vídeo"
#: src/components/compose.jsx:2556 #: src/components/compose.jsx:2588
msgid "Edit audio description" msgid "Edit audio description"
msgstr "Editar descrição do áudio" msgstr "Editar descrição do áudio"
#: src/components/compose.jsx:2601 #: src/components/compose.jsx:2633
#: src/components/compose.jsx:2650 #: src/components/compose.jsx:2682
msgid "Generating description. Please wait…" msgid "Generating description. Please wait…"
msgstr "A gerar descrição. Por favor, espere…" msgstr "A gerar descrição. Por favor, espere…"
#. placeholder {12}: e.message #. placeholder {12}: e.message
#: src/components/compose.jsx:2621 #: src/components/compose.jsx:2653
msgid "Failed to generate description: {12}" msgid "Failed to generate description: {12}"
msgstr "Falhou ao gerar descrição: {12}" msgstr "Falhou ao gerar descrição: {12}"
#: src/components/compose.jsx:2622 #: src/components/compose.jsx:2654
msgid "Failed to generate description" msgid "Failed to generate description"
msgstr "Falhou ao gerar descrição" msgstr "Falhou ao gerar descrição"
#: src/components/compose.jsx:2634 #: src/components/compose.jsx:2666
#: src/components/compose.jsx:2640 #: src/components/compose.jsx:2672
#: src/components/compose.jsx:2686 #: src/components/compose.jsx:2718
msgid "Generate description…" msgid "Generate description…"
msgstr "Gerar descrição…" msgstr "Gerar descrição…"
#. placeholder {13}: e?.message ? `: ${e.message}` : '' #. placeholder {13}: e?.message ? `: ${e.message}` : ''
#: src/components/compose.jsx:2673 #: src/components/compose.jsx:2705
msgid "Failed to generate description{13}" msgid "Failed to generate description{13}"
msgstr "Falhou ao gerar descrição{13}" msgstr "Falhou ao gerar descrição{13}"
#. placeholder {0}: localeCode2Text(lang) #. placeholder {0}: localeCode2Text(lang)
#: src/components/compose.jsx:2688 #: src/components/compose.jsx:2720
msgid "({0}) <0>— experimental</0>" msgid "({0}) <0>— experimental</0>"
msgstr "({0}) <0>— experimental</0>" msgstr "({0}) <0>— experimental</0>"
#: src/components/compose.jsx:2707 #: src/components/compose.jsx:2739
msgid "Done" msgid "Done"
msgstr "Concluído" msgstr "Concluído"
#. placeholder {0}: i + 1 #. placeholder {0}: i + 1
#: src/components/compose.jsx:2743 #: src/components/compose.jsx:2775
msgid "Choice {0}" msgid "Choice {0}"
msgstr "Escolha {0}" msgstr "Escolha {0}"
#: src/components/compose.jsx:2790 #: src/components/compose.jsx:2822
msgid "Multiple choices" msgid "Multiple choices"
msgstr "Várias escolhas" msgstr "Várias escolhas"
#: src/components/compose.jsx:2793 #: src/components/compose.jsx:2825
msgid "Duration" msgid "Duration"
msgstr "Duração" msgstr "Duração"
#: src/components/compose.jsx:2824 #: src/components/compose.jsx:2856
msgid "Remove poll" msgid "Remove poll"
msgstr "Eliminar enquete" msgstr "Eliminar enquete"
#: src/components/compose.jsx:3039 #: src/components/compose.jsx:3071
msgid "Search accounts" msgid "Search accounts"
msgstr "Buscar contas" msgstr "Buscar contas"
#: src/components/compose.jsx:3093 #: src/components/compose.jsx:3125
#: src/components/generic-accounts.jsx:228 #: src/components/generic-accounts.jsx:228
msgid "Error loading accounts" msgid "Error loading accounts"
msgstr "Erro ao carregar contas" msgstr "Erro ao carregar contas"
#: src/components/compose.jsx:3237 #: src/components/compose.jsx:3269
msgid "Custom emojis" msgid "Custom emojis"
msgstr "Emojis personalizados" msgstr "Emojis personalizados"
#: src/components/compose.jsx:3257 #: src/components/compose.jsx:3289
msgid "Search emoji" msgid "Search emoji"
msgstr "Buscar emoji" msgstr "Buscar emoji"
#: src/components/compose.jsx:3288 #: src/components/compose.jsx:3320
msgid "Error loading custom emojis" msgid "Error loading custom emojis"
msgstr "Erro ao carregar emojis personalizados" msgstr "Erro ao carregar emojis personalizados"
#: src/components/compose.jsx:3299 #: src/components/compose.jsx:3331
msgid "Recently used" msgid "Recently used"
msgstr "Usado recentemente" msgstr "Usado recentemente"
#: src/components/compose.jsx:3300 #: src/components/compose.jsx:3332
msgid "Others" msgid "Others"
msgstr "Outros" msgstr "Outros"
#. placeholder {0}: i18n.number(emojis.length - max) #. placeholder {0}: i18n.number(emojis.length - max)
#: src/components/compose.jsx:3338 #: src/components/compose.jsx:3370
msgid "{0} more…" msgid "{0} more…"
msgstr "{0} mais…" msgstr "{0} mais…"
#: src/components/compose.jsx:3476 #: src/components/compose.jsx:3508
msgid "Search GIFs" msgid "Search GIFs"
msgstr "Buscar GIFs" msgstr "Buscar GIFs"
#: src/components/compose.jsx:3491 #: src/components/compose.jsx:3523
msgid "Powered by GIPHY" msgid "Powered by GIPHY"
msgstr "Desenvolvido por GIPHY" msgstr "Desenvolvido por GIPHY"
#: src/components/compose.jsx:3499 #: src/components/compose.jsx:3531
msgid "Type to search GIFs" msgid "Type to search GIFs"
msgstr "Digite para buscar GIFs" msgstr "Digite para buscar GIFs"
#: src/components/compose.jsx:3597 #: src/components/compose.jsx:3629
#: src/components/media-modal.jsx:462 #: src/components/media-modal.jsx:462
#: src/components/timeline.jsx:893 #: src/components/timeline.jsx:893
msgid "Previous" msgid "Previous"
msgstr "Anterior" msgstr "Anterior"
#: src/components/compose.jsx:3615 #: src/components/compose.jsx:3647
#: src/components/media-modal.jsx:481 #: src/components/media-modal.jsx:481
#: src/components/timeline.jsx:910 #: src/components/timeline.jsx:910
msgid "Next" msgid "Next"
msgstr "Seguinte" msgstr "Seguinte"
#: src/components/compose.jsx:3632 #: src/components/compose.jsx:3664
msgid "Error loading GIFs" msgid "Error loading GIFs"
msgstr "Erro ao carregar GIFs" msgstr "Erro ao carregar GIFs"
@ -987,7 +987,7 @@ msgstr "Enquete"
#: src/components/drafts.jsx:250 #: src/components/drafts.jsx:250
#: src/pages/account-statuses.jsx:364 #: src/pages/account-statuses.jsx:364
msgid "Media" msgid "Media"
msgstr "Media" msgstr "Multimédia"
#: src/components/embed-modal.jsx:23 #: src/components/embed-modal.jsx:23
msgid "Open in new window" msgid "Open in new window"
@ -1076,7 +1076,7 @@ msgstr "<0>Shift</0> + <1>k</1>"
#: src/components/keyboard-shortcuts-help.jsx:80 #: src/components/keyboard-shortcuts-help.jsx:80
msgid "Load new posts" msgid "Load new posts"
msgstr "Carregar novas publicações" msgstr "Ver novas postagens"
#: src/components/keyboard-shortcuts-help.jsx:84 #: src/components/keyboard-shortcuts-help.jsx:84
#: src/pages/catchup.jsx:1676 #: src/pages/catchup.jsx:1676
@ -1214,7 +1214,7 @@ msgstr "Não mostrar respostas"
#: src/components/list-add-edit.jsx:144 #: src/components/list-add-edit.jsx:144
msgid "Hide posts on this list from Home/Following" msgid "Hide posts on this list from Home/Following"
msgstr "Ocultar publicações nesta lista da página inicial/A seguir" msgstr "Ocultar postagens nesta lista da página inicial/A seguir"
#: src/components/list-add-edit.jsx:150 #: src/components/list-add-edit.jsx:150
#: src/pages/filters.jsx:554 #: src/pages/filters.jsx:554
@ -1232,7 +1232,7 @@ msgstr "Impossível eliminar lista."
#: src/components/media-alt-modal.jsx:39 #: src/components/media-alt-modal.jsx:39
#: src/components/media.jsx:51 #: src/components/media.jsx:51
msgid "Media description" msgid "Media description"
msgstr "Descrição da media" msgstr "Descrição da multimédia"
#: src/components/media-alt-modal.jsx:58 #: src/components/media-alt-modal.jsx:58
#: src/components/status.jsx:1066 #: src/components/status.jsx:1066
@ -1249,15 +1249,15 @@ msgstr "Falar"
#: src/components/media-modal.jsx:369 #: src/components/media-modal.jsx:369
msgid "Open original media in new window" msgid "Open original media in new window"
msgstr "Abrir media original em nova janela" msgstr "Abrir multimédia original em nova janela"
#: src/components/media-modal.jsx:373 #: src/components/media-modal.jsx:373
msgid "Open original media" msgid "Open original media"
msgstr "Abrir media original" msgstr "Abrir multimédia original"
#: src/components/media-modal.jsx:389 #: src/components/media-modal.jsx:389
msgid "Attempting to describe image. Please wait…" msgid "Attempting to describe image. Please wait…"
msgstr "A tentar descrever imagem. Por favor, espere…" msgstr "A descrever imagem. Por favor, espere…"
#: src/components/media-modal.jsx:404 #: src/components/media-modal.jsx:404
msgid "Failed to describe image" msgid "Failed to describe image"
@ -1273,7 +1273,7 @@ msgstr "Ver publicação"
#: src/components/media-post.jsx:128 #: src/components/media-post.jsx:128
msgid "Sensitive media" msgid "Sensitive media"
msgstr "Media sensível" msgstr "Multimédia sensível"
#: src/components/media-post.jsx:133 #: src/components/media-post.jsx:133
msgid "Filtered: {filterTitleStr}" msgid "Filtered: {filterTitleStr}"
@ -1410,6 +1410,7 @@ msgid "Accounts…"
msgstr "Contas…" msgstr "Contas…"
#: src/components/nav-menu.jsx:315 #: src/components/nav-menu.jsx:315
#: src/pages/login.jsx:27
#: src/pages/login.jsx:190 #: src/pages/login.jsx:190
#: src/pages/status.jsx:837 #: src/pages/status.jsx:837
#: src/pages/welcome.jsx:65 #: src/pages/welcome.jsx:65
@ -1477,7 +1478,7 @@ msgstr "{account} fez uma publicação."
#. placeholder {1}: shortenNumber(count) #. placeholder {1}: shortenNumber(count)
#: src/components/notification.jsx:86 #: src/components/notification.jsx:86
msgid "{count, plural, =1 {{postsCount, plural, =1 {{postType, select, reply {{account} boosted your reply.} other {{account} boosted your post.}}} other {{account} boosted {postsCount} of your posts.}}} other {{postType, select, reply {<0><1>{0}</1> people</0> boosted your reply.} other {<2><3>{1}</3> people</2> boosted your post.}}}}" msgid "{count, plural, =1 {{postsCount, plural, =1 {{postType, select, reply {{account} boosted your reply.} other {{account} boosted your post.}}} other {{account} boosted {postsCount} of your posts.}}} other {{postType, select, reply {<0><1>{0}</1> people</0> boosted your reply.} other {<2><3>{1}</3> people</2> boosted your post.}}}}"
msgstr "{count, plural, =1 {{postsCount, plural, =1 {{postType, select, reply {{account} impulsionou a sua resposta.} other {{account} impulsionou a sua publicação.}}} other {{account} impulsionou {postsCount} das suas publicações.}}} other {{postType, select, reply {<0><1>{0}</1> pessoa(s)</0> impulsionou a sua resposta.} other {<2><3>{1}</3> pessoa(s)</2> impulsionou a sua publicação.}}}}" msgstr "{count, plural, =1 {{postsCount, plural, =1 {{postType, select, reply {{account} impulsionou a sua resposta.} other {{account} impulsionou a sua postagem.}}} other {{account} impulsionou {postsCount} das suas postagens.}}} other {{postType, select, reply {<0><1>{0}</1> pessoa(s)</0> impulsionou a sua resposta.} other {<2><3>{1}</3> pessoa(s)</2> impulsionou a sua postagem.}}}}"
#. placeholder {0}: shortenNumber(count) #. placeholder {0}: shortenNumber(count)
#: src/components/notification.jsx:129 #: src/components/notification.jsx:129
@ -1492,7 +1493,7 @@ msgstr "{account} pediu para seguir-te."
#. placeholder {1}: shortenNumber(count) #. placeholder {1}: shortenNumber(count)
#: src/components/notification.jsx:152 #: src/components/notification.jsx:152
msgid "{count, plural, =1 {{postsCount, plural, =1 {{postType, select, reply {{account} liked your reply.} other {{account} liked your post.}}} other {{account} liked {postsCount} of your posts.}}} other {{postType, select, reply {<0><1>{0}</1> people</0> liked your reply.} other {<2><3>{1}</3> people</2> liked your post.}}}}" msgid "{count, plural, =1 {{postsCount, plural, =1 {{postType, select, reply {{account} liked your reply.} other {{account} liked your post.}}} other {{account} liked {postsCount} of your posts.}}} other {{postType, select, reply {<0><1>{0}</1> people</0> liked your reply.} other {<2><3>{1}</3> people</2> liked your post.}}}}"
msgstr "{count, plural, =1 {{postsCount, plural, =1 {{postType, select, reply {{account} gostou da sua resposta.} other {{account} gostou de sua publicação.}}} other {{account} gostou de {postsCount} de suas publicações.}}} other {{postType, select, reply {<0><1>{0}</1> pessoa(s)</0> gostou da sua resposta.} other {<2><3>{1}</3> pessoa(s)</2> gostou da sua publicação.}}}}" msgstr "{count, plural, =1 {{postsCount, plural, =1 {{postType, select, reply {{account} gostou da sua resposta.} other {{account} gostou da sua postagem.}}} other {{account} gostou de {postsCount} das suas postagens.}}} other {{postType, select, reply {<0><1>{0}</1> pessoa(s)</0> gostou da sua resposta.} other {<2><3>{1}</3> pessoa(s)</2> gostou da sua postagens.}}}}"
#: src/components/notification.jsx:194 #: src/components/notification.jsx:194
msgid "A poll you have voted in or created has ended." msgid "A poll you have voted in or created has ended."
@ -1514,7 +1515,7 @@ msgstr "Uma publicação que interagiste foi editada."
#. placeholder {1}: shortenNumber(count) #. placeholder {1}: shortenNumber(count)
#: src/components/notification.jsx:205 #: src/components/notification.jsx:205
msgid "{count, plural, =1 {{postsCount, plural, =1 {{postType, select, reply {{account} boosted & liked your reply.} other {{account} boosted & liked your post.}}} other {{account} boosted & liked {postsCount} of your posts.}}} other {{postType, select, reply {<0><1>{0}</1> people</0> boosted & liked your reply.} other {<2><3>{1}</3> people</2> boosted & liked your post.}}}}" msgid "{count, plural, =1 {{postsCount, plural, =1 {{postType, select, reply {{account} boosted & liked your reply.} other {{account} boosted & liked your post.}}} other {{account} boosted & liked {postsCount} of your posts.}}} other {{postType, select, reply {<0><1>{0}</1> people</0> boosted & liked your reply.} other {<2><3>{1}</3> people</2> boosted & liked your post.}}}}"
msgstr "{count, plural, =1 {{postsCount, plural, =1 {{postType, select, reply {{account} impulsionou e gostou da sua resposta.} other {{account} impulsionou e gostou da sua publicação.}}} other {{account} impulsionou e gostou de {postsCount} de suas publicações.}}} other {{postType, select, reply {<0><1>{0}</1> pessoa(s)</0> impulsionou e gostou da sua resposta.} other {<2><3>{1}</3> pessoa(s)</2> impulsionou e gostou da sua publicação.}}}}" msgstr "{count, plural, =1 {{postsCount, plural, =1 {{postType, select, reply {{account} impulsionou e gostou da sua resposta.} other {{account} impulsionou e gostou da sua postagem.}}} other {{account} impulsionou e gostou de {postsCount} das suas postagens.}}} other {{postType, select, reply {<0><1>{0}</1> pessoa(s)</0> impulsionou e gostou da sua resposta.} other {<2><3>{1}</3> pessoa(s)</2> impulsionou e gostou da sua postagem.}}}}"
#: src/components/notification.jsx:247 #: src/components/notification.jsx:247
msgid "{account} signed up." msgid "{account} signed up."
@ -1559,15 +1560,15 @@ msgstr "A sua conta foi desativada."
#: src/components/notification.jsx:293 #: src/components/notification.jsx:293
msgid "Some of your posts have been marked as sensitive." msgid "Some of your posts have been marked as sensitive."
msgstr "Algumas das suas publicações foram marcadas como sensível." msgstr "Algumas das suas postagens foram marcados como sensíveis."
#: src/components/notification.jsx:294 #: src/components/notification.jsx:294
msgid "Some of your posts have been deleted." msgid "Some of your posts have been deleted."
msgstr "Algumas publicações suas foram eliminadas." msgstr "Algumas das suas postagens foram eliminadas."
#: src/components/notification.jsx:295 #: src/components/notification.jsx:295
msgid "Your posts will be marked as sensitive from now on." msgid "Your posts will be marked as sensitive from now on."
msgstr "Agora as suas publicações serão marcadas como sensíveis." msgstr "Agora as suas postagens serão marcadas como sensíveis."
#: src/components/notification.jsx:296 #: src/components/notification.jsx:296
msgid "Your account has been limited." msgid "Your account has been limited."
@ -1799,7 +1800,7 @@ msgstr "Enviar relato <0>+ Bloquear perfil</0>"
#: src/components/search-form.jsx:203 #: src/components/search-form.jsx:203
msgid "{query} <0> accounts, hashtags & posts</0>" msgid "{query} <0> accounts, hashtags & posts</0>"
msgstr "{query} <0> contas, hashtags e publicações</0>" msgstr "{query} <0> contas, hashtags e postagens</0>"
#: src/components/search-form.jsx:216 #: src/components/search-form.jsx:216
msgid "Posts with <0>{query}</0>" msgid "Posts with <0>{query}</0>"
@ -1870,7 +1871,7 @@ msgstr "ex.: PixelArt (Máx. 5, espaço separado)"
#: src/components/shortcuts-settings.jsx:117 #: src/components/shortcuts-settings.jsx:117
#: src/pages/hashtag.jsx:356 #: src/pages/hashtag.jsx:356
msgid "Media only" msgid "Media only"
msgstr "Apenas media" msgstr "Somente multimédia"
#: src/components/shortcuts-settings.jsx:235 #: src/components/shortcuts-settings.jsx:235
#: src/components/shortcuts.jsx:192 #: src/components/shortcuts.jsx:192
@ -2152,7 +2153,7 @@ msgstr "Citar"
#: src/components/status.jsx:961 #: src/components/status.jsx:961
#: src/components/status.jsx:2437 #: src/components/status.jsx:2437
msgid "Some media have no descriptions." msgid "Some media have no descriptions."
msgstr "Algumas das medias não têm descrição." msgstr "Algumas multimédias não possuem descrições."
#. placeholder {0}: rtf.format(-statusMonthsAgo, 'month') #. placeholder {0}: rtf.format(-statusMonthsAgo, 'month')
#: src/components/status.jsx:968 #: src/components/status.jsx:968
@ -2331,7 +2332,7 @@ msgstr "Mostrar conteúdo"
#: src/components/status.jsx:2173 #: src/components/status.jsx:2173
msgid "Show media" msgid "Show media"
msgstr "Mostrar media" msgstr "Mostrar multimédia"
#: src/components/status.jsx:2310 #: src/components/status.jsx:2310
msgid "Edited" msgid "Edited"
@ -2373,7 +2374,7 @@ msgstr "Impossível copiar código HTML"
#: src/components/status.jsx:3275 #: src/components/status.jsx:3275
msgid "Media attachments:" msgid "Media attachments:"
msgstr "Anexos de media:" msgstr "Anexos de multimédia:"
#: src/components/status.jsx:3297 #: src/components/status.jsx:3297
msgid "Account Emojis:" msgid "Account Emojis:"
@ -2402,7 +2403,7 @@ msgstr "Votações não são interativas, ela vira uma lista com contador de vot
#: src/components/status.jsx:3402 #: src/components/status.jsx:3402
msgid "Media attachments can be images, videos, audios or any file types." msgid "Media attachments can be images, videos, audios or any file types."
msgstr "Anexos de media pode ser imagens, vídeos, áudios, e qualquer tipo de ficheiro." msgstr "Anexos de multimédia pode ser imagens, vídeos, áudios, e qualquer tipo de ficheiro."
#: src/components/status.jsx:3408 #: src/components/status.jsx:3408
msgid "Post could be edited or deleted later." msgid "Post could be edited or deleted later."
@ -2525,7 +2526,7 @@ msgstr "{accountDisplay} (#{tagged})"
#: src/pages/account-statuses.jsx:245 #: src/pages/account-statuses.jsx:245
msgid "{accountDisplay} (Media)" msgid "{accountDisplay} (Media)"
msgstr "{accountDisplay} (Media)" msgstr "{accountDisplay} (Multimédia)"
#: src/pages/account-statuses.jsx:251 #: src/pages/account-statuses.jsx:251
msgid "{accountDisplay} ({monthYear})" msgid "{accountDisplay} ({monthYear})"
@ -2557,7 +2558,7 @@ msgstr "- Impulsos"
#: src/pages/account-statuses.jsx:359 #: src/pages/account-statuses.jsx:359
msgid "Showing posts with media" msgid "Showing posts with media"
msgstr "A exibir publicações com media" msgstr "A exibir publicações com multimédia"
#. placeholder {0}: tag.name #. placeholder {0}: tag.name
#: src/pages/account-statuses.jsx:376 #: src/pages/account-statuses.jsx:376
@ -3062,7 +3063,7 @@ msgstr "Impossível carregar publicações."
#: src/pages/hashtag.jsx:56 #: src/pages/hashtag.jsx:56
msgid "{hashtagTitle} (Media only) on {instance}" msgid "{hashtagTitle} (Media only) on {instance}"
msgstr "{hashtagTitle} (Apenas media) em {instance}" msgstr "{hashtagTitle} (Somente multimédia) em {instance}"
#: src/pages/hashtag.jsx:57 #: src/pages/hashtag.jsx:57
msgid "{hashtagTitle} on {instance}" msgid "{hashtagTitle} on {instance}"
@ -3070,7 +3071,7 @@ msgstr "{hashtagTitle} em {instance}"
#: src/pages/hashtag.jsx:59 #: src/pages/hashtag.jsx:59
msgid "{hashtagTitle} (Media only)" msgid "{hashtagTitle} (Media only)"
msgstr "{hashtagTitle} (Apenas media)" msgstr "{hashtagTitle} (Somente multimédia)"
#: src/pages/hashtag.jsx:60 #: src/pages/hashtag.jsx:60
msgid "{hashtagTitle}" msgid "{hashtagTitle}"
@ -3573,7 +3574,7 @@ msgstr "Tradução automática"
#: src/pages/settings.jsx:518 #: src/pages/settings.jsx:518
msgid "Automatically show translation for posts in timeline. Only works for <0>short</0> posts without content warning, media and poll." msgid "Automatically show translation for posts in timeline. Only works for <0>short</0> posts without content warning, media and poll."
msgstr "Automaticamente exibe tradução para publicações na linha de tempo. Só funciona para publicações <0>curtas</0> sem aviso de conteúdo, media ou enquete." msgstr "Automaticamente exibe tradução para publicações na linha de tempo. Só funciona para publicações <0>curtas</0> sem aviso de conteúdo, multimédia ou enquete."
#: src/pages/settings.jsx:538 #: src/pages/settings.jsx:538
msgid "GIF Picker for composer" msgid "GIF Picker for composer"

View file

@ -1192,7 +1192,7 @@ function Catchup() {
key={url} key={url}
href={url} href={url}
target="_blank" target="_blank"
rel="noopener noreferrer" rel="noopener"
class="link-block" class="link-block"
style={ style={
accentColor accentColor

View file

@ -68,7 +68,7 @@ export default function HttpRoute() {
<Trans>Resolving</Trans> <Trans>Resolving</Trans>
</h2> </h2>
<p> <p>
<a href={url} target="_blank" rel="noopener noreferrer"> <a href={url} target="_blank" rel="noopener">
{url} {url}
</a> </a>
</p> </p>
@ -79,7 +79,7 @@ export default function HttpRoute() {
<Trans>Unable to resolve URL</Trans> <Trans>Unable to resolve URL</Trans>
</h2> </h2>
<p> <p>
<a href={url} target="_blank" rel="noopener noreferrer"> <a href={url} target="_blank" rel="noopener">
{url} {url}
</a> </a>
</p> </p>

View file

@ -24,7 +24,7 @@ const { PHANPY_DEFAULT_INSTANCE: DEFAULT_INSTANCE } = import.meta.env;
function Login() { function Login() {
const { t } = useLingui(); const { t } = useLingui();
useTitle('Log in'); useTitle(t`Log in`, '/login');
const instanceURLRef = useRef(); const instanceURLRef = useRef();
const cachedInstanceURL = store.local.get('instanceURL'); const cachedInstanceURL = store.local.get('instanceURL');
const [uiState, setUIState] = useState('default'); const [uiState, setUIState] = useState('default');

View file

@ -250,7 +250,7 @@ function Settings({ onClose }) {
<a <a
href="https://crowdin.com/project/phanpy" href="https://crowdin.com/project/phanpy"
target="_blank" target="_blank"
rel="noopener noreferrer" rel="noopener"
> >
<Trans>Volunteer translations</Trans> <Trans>Volunteer translations</Trans>
</a> </a>
@ -324,7 +324,7 @@ function Settings({ onClose }) {
<a <a
href={`https://${instance}/`} href={`https://${instance}/`}
target="_blank" target="_blank"
rel="noopener noreferrer" rel="noopener"
> >
Go to your instance ({instance}) for more settings. Go to your instance ({instance}) for more settings.
</a> </a>
@ -483,7 +483,7 @@ function Settings({ onClose }) {
<a <a
href="https://github.com/cheeaun/lingva-api" href="https://github.com/cheeaun/lingva-api"
target="_blank" target="_blank"
rel="noopener noreferrer" rel="noopener"
> >
Lingva API Lingva API
</a>{' '} </a>{' '}
@ -491,7 +491,7 @@ function Settings({ onClose }) {
<a <a
href="https://github.com/thedaviddelta/lingva-translate" href="https://github.com/thedaviddelta/lingva-translate"
target="_blank" target="_blank"
rel="noopener noreferrer" rel="noopener"
> >
Lingva Translate Lingva Translate
</a> </a>
@ -545,7 +545,7 @@ function Settings({ onClose }) {
<a <a
href="https://developers.giphy.com/" href="https://developers.giphy.com/"
target="_blank" target="_blank"
rel="noopener noreferrer" rel="noopener"
> >
GIPHY GIPHY
</a> </a>
@ -585,7 +585,7 @@ function Settings({ onClose }) {
<a <a
href="https://github.com/cheeaun/img-alt-api" href="https://github.com/cheeaun/img-alt-api"
target="_blank" target="_blank"
rel="noopener noreferrer" rel="noopener"
> >
img-alt-api img-alt-api
</a> </a>
@ -728,7 +728,7 @@ function Settings({ onClose }) {
<a <a
href="https://hachyderm.io/@phanpy" href="https://hachyderm.io/@phanpy"
// target="_blank" // target="_blank"
rel="noopener noreferrer" rel="noopener"
onClick={(e) => { onClick={(e) => {
e.preventDefault(); e.preventDefault();
states.showAccount = 'phanpy@hachyderm.io'; states.showAccount = 'phanpy@hachyderm.io';
@ -741,7 +741,7 @@ function Settings({ onClose }) {
<a <a
href="https://github.com/cheeaun/phanpy" href="https://github.com/cheeaun/phanpy"
target="_blank" target="_blank"
rel="noopener noreferrer" rel="noopener"
> >
Built Built
</a>{' '} </a>{' '}
@ -749,7 +749,7 @@ function Settings({ onClose }) {
<a <a
href="https://mastodon.social/@cheeaun" href="https://mastodon.social/@cheeaun"
// target="_blank" // target="_blank"
rel="noopener noreferrer" rel="noopener"
onClick={(e) => { onClick={(e) => {
e.preventDefault(); e.preventDefault();
states.showAccount = 'cheeaun@mastodon.social'; states.showAccount = 'cheeaun@mastodon.social';
@ -764,7 +764,7 @@ function Settings({ onClose }) {
<a <a
href="https://github.com/sponsors/cheeaun" href="https://github.com/sponsors/cheeaun"
target="_blank" target="_blank"
rel="noopener noreferrer" rel="noopener"
> >
<Trans>Sponsor</Trans> <Trans>Sponsor</Trans>
</a>{' '} </a>{' '}
@ -772,7 +772,7 @@ function Settings({ onClose }) {
<a <a
href="https://www.buymeacoffee.com/cheeaun" href="https://www.buymeacoffee.com/cheeaun"
target="_blank" target="_blank"
rel="noopener noreferrer" rel="noopener"
> >
<Trans>Donate</Trans> <Trans>Donate</Trans>
</a>{' '} </a>{' '}
@ -780,16 +780,12 @@ function Settings({ onClose }) {
<a <a
href="https://patreon.com/cheeaun" href="https://patreon.com/cheeaun"
target="_blank" target="_blank"
rel="noopener noreferrer" rel="noopener"
> >
Patreon Patreon
</a>{' '} </a>{' '}
&middot;{' '} &middot;{' '}
<a <a href={PRIVACY_POLICY_URL} target="_blank" rel="noopener">
href={PRIVACY_POLICY_URL}
target="_blank"
rel="noopener noreferrer"
>
<Trans>Privacy Policy</Trans> <Trans>Privacy Policy</Trans>
</a> </a>
</p> </p>
@ -832,7 +828,7 @@ function Settings({ onClose }) {
<a <a
href={`https://github.com/cheeaun/phanpy/commit/${__COMMIT_HASH__}`} href={`https://github.com/cheeaun/phanpy/commit/${__COMMIT_HASH__}`}
target="_blank" target="_blank"
rel="noopener noreferrer" rel="noopener"
> >
<RelativeTime datetime={new Date(__BUILD_TIME__)} /> <RelativeTime datetime={new Date(__BUILD_TIME__)} />
</a> </a>
@ -984,10 +980,10 @@ function PushNotificationsSection({ onClose }) {
const policyEl = elements.namedItem('policy'); const policyEl = elements.namedItem('policy');
if (policyEl) policyEl.value = policy; if (policyEl) policyEl.value = policy;
// alerts is {}, iterate it // alerts is {}, iterate it
Object.keys(alerts).forEach((alert) => { Object.entries(alerts).forEach(([alert, value]) => {
const el = elements.namedItem(alert); const el = elements.namedItem(alert);
if (el?.type === 'checkbox') { if (el?.type === 'checkbox') {
el.checked = true; el.checked = !!value;
} }
}); });
} }

View file

@ -274,7 +274,7 @@ function Trending({ columnMode, ...props }) {
ref={currentLink === url ? currentLinkRef : null} ref={currentLink === url ? currentLinkRef : null}
href={url} href={url}
target="_blank" target="_blank"
rel="noopener noreferrer" rel="noopener"
class={`link-block ${ class={`link-block ${
hasCurrentLink hasCurrentLink
? currentLink === url ? currentLink === url
@ -353,7 +353,7 @@ function Trending({ columnMode, ...props }) {
<a <a
href={authorUrl} href={authorUrl}
target="_blank" target="_blank"
rel="noopener noreferrer" rel="noopener"
> >
{authorName} {authorName}
</a> </a>

View file

@ -218,7 +218,7 @@ function _enhanceContent(content, opts = {}) {
if (TWITTER_MENTION_REGEX.test(html)) { if (TWITTER_MENTION_REGEX.test(html)) {
html = html.replaceAll( html = html.replaceAll(
TWITTER_MENTION_CAPTURE_REGEX, TWITTER_MENTION_CAPTURE_REGEX,
'<a href="https://twitter.com/$2" rel="nofollow noopener noreferrer" target="_blank">$1</a>', '<a href="https://twitter.com/$2" rel="nofollow noopener" target="_blank">$1</a>',
); );
} }
fauxDiv.innerHTML = html; fauxDiv.innerHTML = html;

View file

@ -8,6 +8,7 @@ export default function isMastodonLinkMaybe(url) {
/^\/(notice|objects)\/[a-z0-9-]+$/i.test(pathname) || // Pleroma /^\/(notice|objects)\/[a-z0-9-]+$/i.test(pathname) || // Pleroma
/^\/@[^/]+\/post\/[a-z0-9\-_]+$/i.test(pathname) || // Threads /^\/@[^/]+\/post\/[a-z0-9\-_]+$/i.test(pathname) || // Threads
/^\/@[^/]+\/[a-z0-9]+[a-z0-9\-]+[a-z0-9]+$/i.test(pathname) || // Hollo /^\/@[^/]+\/[a-z0-9]+[a-z0-9\-]+[a-z0-9]+$/i.test(pathname) || // Hollo
/^\/ap\/note\/[a-z0-9\-_]+$/i.test(pathname) || // BotKit, Fedify
(hostname === 'fed.brid.gy' && pathname.startsWith('/r/http')) || // Bridgy Fed (hostname === 'fed.brid.gy' && pathname.startsWith('/r/http')) || // Bridgy Fed
/#\/[^\/]+\.[^\/]+\/s\/.+/i.test(hash) // Phanpy 🫣 /#\/[^\/]+\.[^\/]+\/s\/.+/i.test(hash) // Phanpy 🫣
); );

View file

@ -4,7 +4,7 @@ import { resolve } from 'path';
import { lingui } from '@lingui/vite-plugin'; import { lingui } from '@lingui/vite-plugin';
import preact from '@preact/preset-vite'; import preact from '@preact/preset-vite';
import { SondaRollupPlugin } from 'sonda'; import Sonda from 'sonda/vite';
import { uid } from 'uid/single'; import { uid } from 'uid/single';
import { defineConfig, loadEnv, splitVendorChunkPlugin } from 'vite'; import { defineConfig, loadEnv, splitVendorChunkPlugin } from 'vite';
import generateFile from 'vite-plugin-generate-file'; import generateFile from 'vite-plugin-generate-file';
@ -21,6 +21,7 @@ const {
PHANPY_WEBSITE: WEBSITE, PHANPY_WEBSITE: WEBSITE,
PHANPY_CLIENT_NAME: CLIENT_NAME, PHANPY_CLIENT_NAME: CLIENT_NAME,
PHANPY_APP_ERROR_LOGGING: ERROR_LOGGING, PHANPY_APP_ERROR_LOGGING: ERROR_LOGGING,
PHANPY_REFERRER_POLICY: REFERRER_POLICY,
} = loadEnv('production', process.cwd(), allowedEnvPrefixes); } = loadEnv('production', process.cwd(), allowedEnvPrefixes);
const now = new Date(); const now = new Date();
@ -86,6 +87,13 @@ export default defineConfig({
includes: ['log', 'debug', 'info', 'warn', 'error'], includes: ['log', 'debug', 'info', 'warn', 'error'],
}), }),
htmlPlugin({ htmlPlugin({
metas: [
// Learn more: https://web.dev/articles/referrer-best-practices
{
name: 'referrer',
content: REFERRER_POLICY || 'origin',
},
],
headScripts: ERROR_LOGGING ? [rollbarCode] : [], headScripts: ERROR_LOGGING ? [rollbarCode] : [],
links: [ links: [
...ALL_LOCALES.map((lang) => ({ ...ALL_LOCALES.map((lang) => ({
@ -150,7 +158,7 @@ export default defineConfig({
type: 'module', type: 'module',
}, },
}), }),
SondaRollupPlugin({ Sonda({
detailed: true, detailed: true,
brotli: true, brotli: true,
}), }),