* Update .env.docker

Registry has changed. Old registry has been discontinued in August 2024. New Registry added, format of Docker tag has been adjusted as it now contains the Debian Release as well.

Sample Version is set to current stable but can be adjusted to any of the available branches.

* Update .env.docker

Stick major.minor according to https://jippi.github.io/docker-pixelfed/customize/tags/#pixelfed-version

Disable Debian Release Check until it's solved in dottie.

Closes https://github.com/pixelfed/pixelfed/issues/5264

* New translations web.php (Finnish)
[ci skip]

* New translations web.php (Finnish)
[ci skip]

* fix: don't restore memory limit after cities import

Since this command can only be invoked by CLI, the process will exit after a successful import, so restoring the transient PHP memory limit doesn't really have any affect.

In PHP 8.4, this throws the following error (which doesn't happen in 8.3 and below)

> [entrypoint / 11-first-time-setup.sh] - (stderr) 128769/128769 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%[2025-01-20 11:29:23] production.ERROR: Failed to set memory limit to 134217728 bytes (Current memory usage is 134746112 bytes) {"exception":"[object] (ErrorException(code: 0): Failed to set memory limit to 134217728 bytes (Current memory usage is 134746112 bytes) at /var/www/app/Console/Commands/ImportCities.php:140)

It seems to be a 8.4 behavior change, so removing the logic would make it go away

* New translations web.php (Finnish)
[ci skip]

* New translations web.php (Finnish)
[ci skip]

* New translations web.php (Portuguese)
[ci skip]

* New translations web.php (Portuguese)
[ci skip]

* fix(compose-modal): avoid WebGL if it's not needed

* fix(compose-modal): update webgl-media-editor

* New translations web.php (Hungarian)
[ci skip]

* New translations web.php (Russian)
[ci skip]

* New translations web.php (Russian)
[ci skip]

* Update .env.example

Adding the parameter INSTANCE_DISCOVER_PUBLIC="true" to prevent a HTTP 403 error at the explorer tab in the instance preview.

* New variable for lang spanish

* Variable for lang spanish

* Update Dockerfile, fixes #5535 #5559

* Fix #5582

* Fix #5632

* Update status twitter:card to summary_large_image for images/albums

* Update changelog

---------

Co-authored-by: Lioh Moeller <lioh.moeller@gmx.net>
Co-authored-by: Christian Winther <jippignu@gmail.com>
Co-authored-by: Taye Adeyemi <dev@taye.me>
Co-authored-by: stemy2 <stemy2@users.noreply.github.com>
Co-authored-by: Uthanien <feldarec@gmail.com>
This commit is contained in:
daniel 2025-02-04 04:48:48 -07:00 committed by GitHub
parent 4d68580da4
commit 6276d3539a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
18 changed files with 1176 additions and 1060 deletions

View file

@ -964,7 +964,7 @@ TZ="${APP_TIMEZONE}"
# Combined with [DOCKER_APP_RUNTIME] and [PHP_VERSION] configured
# elsewhere in this file, the final Docker tag is computed.
# @dottie/validate required
DOCKER_APP_RELEASE="branch-jippi-fork"
DOCKER_APP_RELEASE="v0.12"
# The PHP version to use for [web] and [worker] container
#
@ -981,7 +981,7 @@ DOCKER_APP_RELEASE="branch-jippi-fork"
# *only* the version part. The rest of the full tag is derived from
# the [DOCKER_APP_RUNTIME] and [PHP_DEBIAN_RELEASE] settings
# @dottie/validate required
DOCKER_APP_PHP_VERSION="8.2"
DOCKER_APP_PHP_VERSION="8.3"
# The container runtime to use.
#
@ -993,7 +993,7 @@ DOCKER_APP_RUNTIME="apache"
#
# Examlpe: [bookworm] or [bullseye]
# @dottie/validate required,oneof=bookworm bullseye
DOCKER_APP_DEBIAN_RELEASE="bullseye"
DOCKER_APP_DEBIAN_RELEASE="bookworm"
# The [php] Docker image base type
#
@ -1010,7 +1010,7 @@ DOCKER_APP_BASE_TYPE="apache"
# * "your/fork" to pull from a custom fork
#
# @dottie/validate required
DOCKER_APP_IMAGE="ghcr.io/jippi/pixelfed"
DOCKER_APP_IMAGE="ghcr.io/jippi/docker-pixelfed"
# Pixelfed version (image tag) to pull from the registry.
#

View file

@ -9,6 +9,7 @@ ENFORCE_EMAIL_VERIFICATION="false"
PF_MAX_USERS="1000"
OAUTH_ENABLED="true"
ENABLE_CONFIG_CACHE=true
INSTANCE_DISCOVER_PUBLIC="true"
# Media Configuration
PF_OPTIMIZE_IMAGES="true"

View file

@ -40,6 +40,7 @@
- Update ComposeController, add max_media_attachments attribute ([17918cbe](https://github.com/pixelfed/pixelfed/commit/17918cbe))
- Fix GroupController, move groups enabled check to each method to fix route:list ([f260572e](https://github.com/pixelfed/pixelfed/commit/f260572e))
- Update MediaStorageService, handle local media deletes after successful S3 upload ([280f63dc](https://github.com/pixelfed/pixelfed/commit/280f63dc))
- Update status twitter:card to summary_large_image for images/albums ([9a5a9f55](https://github.com/pixelfed/pixelfed/commit/9a5a9f55))
- ([](https://github.com/pixelfed/pixelfed/commit/))
## [v0.12.4 (2024-11-08)](https://github.com/pixelfed/pixelfed/compare/v0.12.4...dev)

View file

@ -28,11 +28,11 @@ ARG DOTTIE_VERSION="v0.9.5"
###
# See: https://hub.docker.com/_/php/tags
ARG PHP_VERSION="8.1"
ARG PHP_VERSION="8.3"
# See: https://github.com/docker-library/docs/blob/master/php/README.md#image-variants
ARG PHP_BASE_TYPE="apache"
ARG PHP_DEBIAN_RELEASE="bullseye"
ARG PHP_DEBIAN_RELEASE="bookworm"
ARG RUNTIME_UID=33 # often called 'www-data'
ARG RUNTIME_GID=33 # often called 'www-data'

View file

@ -74,7 +74,6 @@ class ImportCities extends Command
*/
public function handle()
{
$old_memory_limit = ini_get('memory_limit');
ini_set('memory_limit', '256M');
$path = storage_path('app/cities.json');
@ -137,7 +136,6 @@ class ImportCities extends Command
$this->line('');
$this->info('Successfully imported ' . $cityCount . ' entries!');
$this->line('');
ini_set('memory_limit', $old_memory_limit);
return;
}

View file

@ -103,7 +103,7 @@ class TransformImports extends Command
continue;
}
$caption = $ip->caption;
$caption = $ip->caption ?? "";
$status = new Status;
$status->profile_id = $pid;
$status->caption = $caption;

37
package-lock.json generated
View file

@ -44,7 +44,7 @@
"vue-loading-overlay": "^3.3.3",
"vue-timeago": "^5.1.2",
"vue-tribute": "^1.0.7",
"webgl-media-editor": "^0.0.1",
"webgl-media-editor": "^0.0.6",
"zuck.js": "^1.6.0"
},
"devDependencies": {
@ -2323,6 +2323,12 @@
"m3u8-parser": "~4.7.1"
}
},
"node_modules/@reactively/core": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/@reactively/core/-/core-0.0.8.tgz",
"integrity": "sha512-5uAnNf2gQSm3gM7z6Lx079H1/MuDQQI+5aYfwyDFGR9nHZj8yblLY/6aOJVWp+NcBwXVBKuWQ28qWHD9F1qN1w==",
"license": "ISC"
},
"node_modules/@thaunknown/simple-peer": {
"version": "10.0.11",
"resolved": "https://registry.npmjs.org/@thaunknown/simple-peer/-/simple-peer-10.0.11.tgz",
@ -5645,6 +5651,15 @@
"node": ">=8"
}
},
"node_modules/fine-jsx": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/fine-jsx/-/fine-jsx-0.0.5.tgz",
"integrity": "sha512-UKQ0ymyZnA605yf7np/wAv3iTs6i9oRKgyYmz+dX+F3VanYEBr60zRQ+WPcYzXMtl9NghNxT736qHfDBjoXVDg==",
"license": "AGPL-3.0-only",
"dependencies": {
"@reactively/core": "^0.0.8"
}
},
"node_modules/fizzy-ui-utils": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/fizzy-ui-utils/-/fizzy-ui-utils-2.0.7.tgz",
@ -10749,16 +10764,28 @@
"node": ">= 8"
}
},
"node_modules/webgl-effects": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/webgl-effects/-/webgl-effects-0.0.3.tgz",
"integrity": "sha512-P+qxcO0QyydUnHHwnsge2ckou85Pnsdgn0BKAjrhD9LiPFz5i2hq8rT8AdS7wNdXrXyqlM1Y0id+AB0gKTDtpQ==",
"license": "AGPL-3.0-only",
"dependencies": {
"gl-matrix": "^3.4.3",
"twgl.js": "^5.5.4"
}
},
"node_modules/webgl-media-editor": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/webgl-media-editor/-/webgl-media-editor-0.0.1.tgz",
"integrity": "sha512-TxnuRl3rpWa1Cia/pn+vh+0iz3yDNwzsrnRGJ61YkdZAYuimu2afBivSHv0RK73hKza6Y/YoRCkuEcsFmtxPNw==",
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/webgl-media-editor/-/webgl-media-editor-0.0.6.tgz",
"integrity": "sha512-hqpIY+a+ay3QzXKECC4pFSHS0dVogV3GlBWzuSwBzEeGZcs7MeEYxLhFdqUa1D2xFtNnXb0pAo+1lCndYDKP2A==",
"license": "AGPL-3.0-only",
"dependencies": {
"cropperjs": "^1.6.2",
"fine-jsx": "^0.0.5",
"gl-matrix": "^3.4.3",
"throttle-debounce": "^5.0.2",
"twgl.js": "^5.5.4"
"twgl.js": "^5.5.4",
"webgl-effects": "^0.0.3"
}
},
"node_modules/webidl-conversions": {

View file

@ -71,7 +71,7 @@
"vue-loading-overlay": "^3.3.3",
"vue-timeago": "^5.1.2",
"vue-tribute": "^1.0.7",
"webgl-media-editor": "^0.0.1",
"webgl-media-editor": "^0.0.6",
"zuck.js": "^1.6.0"
},
"collective": {

View file

@ -1015,19 +1015,29 @@ export default {
},
created() {
this.editor = new MediaEditor({
effects: filterEffects,
onEdit: (index, {effect, intensity, crop}) => {
if (index >= this.files.length) return
const file = this.files[index]
try {
this.editor = new MediaEditor({
effects: filterEffects,
onEdit: (sourceIndex, {effect, intensity, crop}) => {
if (sourceIndex >= this.files.length) return
const file = this.files[sourceIndex]
this.$set(file, 'editState', { effect, intensity, crop })
},
onRenderPreview: (sourceIndex, previewUrl) => {
const media = this.media[sourceIndex]
if (media) media.preview_url = previewUrl
},
})
this.$set(file, 'editState', { effect, intensity, crop })
},
onRenderPreview: (sourceIndex, previewUrl) => {
if (sourceIndex >= this.files.length) return
const file = this.files[sourceIndex]
const { editState } = file
const media = this.media[sourceIndex]
// If the image was edited, use the preview image from the editor.
if (editState && (editState.crop || editState.effect !== -1)) media.preview_url = previewUrl
// When no edits are applied, use the original media URL.
// This limits broken previews with firefox's resistFingerprinting setting.
else media.preview_url = media.url
},
})
} catch {}
},
computed: {
@ -1054,8 +1064,9 @@ export default {
},
destroyed() {
this.files.forEach(fileInfo => {
URL.revokeObjectURL(fileInfo.url);
this.media.forEach(media => {
URL.revokeObjectURL(media.url);
URL.revokeObjectURL(media.preview_url);
})
this.files.length = this.media.length = 0
this.editor = undefined
@ -1161,7 +1172,7 @@ export default {
const type = file.type.replace(/\/.*/, '')
const url = URL.createObjectURL(file)
const preview_url = type === 'image' ? url : '/storage/no-preview.png'
const preview_url = type === 'image' ? URL.createObjectURL(file) : '/storage/no-preview.png'
this.files.push({ file, editState: undefined })
this.media.push({ url, preview_url, type })
@ -1182,7 +1193,16 @@ export default {
const media = this.media[i]
if (media.type === 'image' && fileInfo.editState) {
file = await this.editor.toBlob(i)
const { editState, cropperBlob } = fileInfo
// If the WebGL editor is supported by the browser, apply the edits and use the resulting blob
if (this.editor && (editState.effect !== -1 || !!editState.crop)) {
file = await this.editor.toBlob(i)
}
// Otherwise, only the cropped result from cropper.js may be used
else if (cropperBlob) {
file = cropperBlob
}
}
let form = new FormData();
@ -1555,12 +1575,29 @@ export default {
break;
case 'cropPhoto':
const { editState } = this.files[this.carouselCursor]
const file = this.files[this.carouselCursor]
const { cropper } = this.$refs
// update the file state in this vue component
const croppedState = {
...editState,
crop: this.$refs.cropper.getData()
...file.editState,
crop: cropper.getData()
}
this.editor.setEditState(this.carouselCursor, croppedState)
if (this.editor) {
// also update the file state in the WebGL editor
this.editor.setEditState(this.carouselCursor, croppedState)
} else {
// if the browser can't run the WebGL editor, get the cropped image from cropper.js
cropper.getCroppedCanvas().toBlob((blob) => {
const { media } = this.media[this.carouselCursor]
file.croppedBlob = blob
URL.revokeObjectURL(media.preview_url)
media.preview_url = URL.createObjectURL(blob)
})
}
this.page = 2;
break;

View file

@ -13,7 +13,7 @@ return [
|
*/
'failed' => 'Los datos introducidos no son válidos.',
'throttle' => 'Demasiados intentos de iniciar sesión. Por favor, inténtalo de nuevo en :seconds segundos.',
'failed' => 'Los datos introducidos no son válidos.',
'throttle' => 'Demasiados intentos de iniciar sesión. Por favor, inténtalo de nuevo en :seconds segundos.',
];

View file

@ -0,0 +1,11 @@
<?php
return [
'compose' => [
'invalid' => [
'album' => 'Debe contener solo una foto o video, o multiples.',
],
],
];

View file

@ -2,7 +2,10 @@
return [
'likedPhoto' => 'le gustó tu foto.',
'likedPhoto' => 'le gustó tu foto.',
'likedComment' => 'le gustó tu comentario.',
'startedFollowingYou' => 'empezó a seguirte.',
'commented' => 'comentó tu foto.',
'mentionedYou' => 'te menciono.',
'shared' => 'compartir tu foto.',
];

View file

@ -3,7 +3,7 @@
return [
'common' => [
'comment' => 'Kommentti',
'comment' => 'Kommentoi',
'commented' => 'Kommentoitu',
'comments' => 'Kommentit',
'like' => 'Tykkää',
@ -13,7 +13,7 @@ return [
'shared' => 'Jaettu',
'shares' => 'Jaot',
'unshare' => 'Peru jakaminen',
'bookmark' => 'Bookmark',
'bookmark' => 'Kirjanmerkki',
'cancel' => 'Peruuta',
'copyLink' => 'Kopioi linkki',
@ -24,10 +24,10 @@ return [
'other' => 'Muu',
'readMore' => 'Lue lisää',
'success' => 'Onnistui',
'proceed' => 'Proceed',
'next' => 'Next',
'close' => 'Close',
'clickHere' => 'click here',
'proceed' => 'Jatka',
'next' => 'Seuraava',
'close' => 'Sulje',
'clickHere' => 'klikkaa tästä',
'sensitive' => 'Sensitiivinen',
'sensitiveContent' => 'Sensitiivinen sisältö',
@ -82,71 +82,71 @@ return [
'notifications' => [
'liked' => 'tykkäsi sinun',
'commented' => 'kommentoi sinun',
'reacted' => 'reacted to your',
'shared' => 'shared your',
'tagged' => 'tagged you in a',
'reacted' => 'reagoi sinun',
'shared' => 'jakoi sinun',
'tagged' => 'merkitsi sinut',
'updatedA' => 'updated a',
'sentA' => 'sent a',
'updatedA' => 'päivitetty',
'sentA' => 'lähetti',
'followed' => 'followed',
'mentioned' => 'mentioned',
'you' => 'you',
'followed' => 'seuraa',
'mentioned' => 'mainittu',
'you' => 'sinä',
'yourApplication' => 'Your application to join',
'applicationApproved' => 'was approved!',
'applicationRejected' => 'was rejected. You can re-apply to join in 6 months.',
'yourApplication' => 'Liittymistä koskeva hakemuksesi',
'applicationApproved' => 'oli hyväksytty!',
'applicationRejected' => 'oli hylätty. Voit hakea uudelleen 6 kuukauden kuluttua.',
'dm' => 'dm',
'groupPost' => 'group post',
'modlog' => 'modlog',
'post' => 'post',
'story' => 'story',
'noneFound' => 'No notifications found',
'dm' => 'yv',
'groupPost' => 'ryhmäviesti',
'modlog' => 'modelogi',
'post' => 'viesti',
'story' => 'tarina',
'noneFound' => 'Ilmoituksia ei löytynyt',
],
'post' => [
'shareToFollowers' => 'Share to followers',
'shareToOther' => 'Share to other',
'noLikes' => 'No likes yet',
'uploading' => 'Uploading',
'shareToFollowers' => 'Jaa seuraajille',
'shareToOther' => 'Jaa muille',
'noLikes' => 'Tykkäyksiä ei ole vielä',
'uploading' => 'Siirretään',
],
'profile' => [
'posts' => 'Posts',
'followers' => 'Followers',
'following' => 'Following',
'admin' => 'Admin',
'collections' => 'Collections',
'follow' => 'Follow',
'unfollow' => 'Unfollow',
'editProfile' => 'Edit Profile',
'followRequested' => 'Follow Requested',
'joined' => 'Joined',
'posts' => 'Julkaisut',
'followers' => 'Seuraajat',
'following' => 'Seurataan',
'admin' => 'Ylläpitäjä',
'collections' => 'Kokoelmat',
'follow' => 'Seuraa',
'unfollow' => 'Lopeta seuraaminen',
'editProfile' => 'Muokkaa profiilia',
'followRequested' => 'Seuraamista pyydetty',
'joined' => 'Liittynyt',
'emptyCollections' => 'We can\'t seem to find any collections',
'emptyPosts' => 'We can\'t seem to find any posts',
'emptyCollections' => 'Emme näytä löytävän yhtään kokoelmaa',
'emptyPosts' => 'Emme näytä löytävän yhtään viestiä',
],
'menu' => [
'viewPost' => 'View Post',
'viewProfile' => 'View Profile',
'moderationTools' => 'Moderation Tools',
'report' => 'Report',
'archive' => 'Archive',
'unarchive' => 'Unarchive',
'embed' => 'Embed',
'viewPost' => 'Näytä viesti',
'viewProfile' => 'Näytä profiili',
'moderationTools' => 'Moderointityökalut',
'report' => 'Ilmoita',
'archive' => 'Arkisto',
'unarchive' => 'Palauta arkistosta',
'embed' => 'Upota',
'selectOneOption' => 'Select one of the following options',
'unlistFromTimelines' => 'Unlist from Timelines',
'addCW' => 'Add Content Warning',
'removeCW' => 'Remove Content Warning',
'markAsSpammer' => 'Mark as Spammer',
'markAsSpammerText' => 'Unlist + CW existing and future posts',
'spam' => 'Spam',
'sensitive' => 'Sensitive Content',
'abusive' => 'Abusive or Harmful',
'underageAccount' => 'Underage Account',
'selectOneOption' => 'Valitse yksi seuraavista vaihtoehdoista',
'unlistFromTimelines' => 'Poista aikajanalta',
'addCW' => 'Lisää sisältövaroitus',
'removeCW' => 'Poista sisältövaroitus',
'markAsSpammer' => 'Merkitse roskapostittajaksi',
'markAsSpammerText' => 'Unlist + SV olevat ja tulevat julkaisut',
'spam' => 'Roskaposti',
'sensitive' => 'Arkaluonteista sisältöä',
'abusive' => 'Hyökkäävä tai haitallinen',
'underageAccount' => 'Alaikäisen tili',
'copyrightInfringement' => 'Tekijänoikeusloukkaus',
'impersonation' => 'Väärennetty henkilöllisyys',
'scamOrFraud' => 'Huijaus tai petos',
@ -182,27 +182,27 @@ return [
],
'timeline' => [
'peopleYouMayKnow' => 'People you may know',
'peopleYouMayKnow' => 'Ihmisiä, jotka saatat tuntea',
'onboarding' => [
'welcome' => 'Welcome',
'thisIsYourHomeFeed' => 'This is your home feed, a chronological feed of posts from accounts you follow.',
'letUsHelpYouFind' => 'Let us help you find some interesting people to follow',
'refreshFeed' => 'Refresh my feed',
'welcome' => 'Tervetuloa',
'thisIsYourHomeFeed' => 'Tämä on kotisyötteesi. Aikajärjestyksessä oleva syöte seuraamiesi käyttäjien julkaisuista.',
'letUsHelpYouFind' => 'Anna meidän auttaa löytämään mielenkiintoisia ihmisiä seurattavaksi',
'refreshFeed' => 'Päivitä syötteeni',
],
],
'hashtags' => [
'emptyFeed' => 'We can\'t seem to find any posts for this hashtag'
'emptyFeed' => 'Emme näytä löytävän yhtään viestiä tälle aihetunnisteelle'
],
'report' => [
'report' => 'Report',
'selectReason' => 'Select a reason',
'reported' => 'Reported',
'sendingReport' => 'Sending report',
'thanksMsg' => 'Thanks for the report, people like you help keep our community safe!',
'contactAdminMsg' => 'If you\'d like to contact an administrator about this post or report',
'report' => 'Ilmoita',
'selectReason' => 'Valitse syy',
'reported' => 'Ilmoitettu',
'sendingReport' => 'Lähetetään ilmoitusta',
'thanksMsg' => 'Kiitos ilmoituksesta. Sinä ja kaltaisesi autatte pitämään yhteisön turvallisena!',
'contactAdminMsg' => 'Jos haluaisit ottaa yhteyttä ylläpitoom tästä julkaisusta tai ilmoittaa sen',
],
];

View file

@ -44,7 +44,7 @@ return [
'admin' => 'Admin irányítópult',
// Timelines
'homeFeed' => 'Kezdőlap',
'homeFeed' => 'Saját idővonal',
'localFeed' => 'Helyi idővonal',
'globalFeed' => 'Globális idővonal',
@ -63,7 +63,7 @@ return [
'logout' => 'Kijelentkezés',
// Nav footer
'about' => 'Rólunk',
'about' => 'Névjegy',
'help' => 'Súgó',
'language' => 'Nyelv',
'privacy' => 'Adatvédelem',
@ -186,9 +186,9 @@ return [
'onboarding' => [
'welcome' => 'Üdvözöljük',
'thisIsYourHomeFeed' => 'Ez a kezdőlap, az Ön által követett fiókok bejegyzései időrendi sorrendben.',
'thisIsYourHomeFeed' => 'Ez a saját idővonala, az Ön által követett fiókok bejegyzései időrendi sorrendben.',
'letUsHelpYouFind' => 'Keressünk érdekes, követhető embereket',
'refreshFeed' => 'Kezdőlap frissítése',
'refreshFeed' => 'Idővonal frissítése',
],
],

View file

@ -19,48 +19,48 @@ return [
'copyLink' => 'Copiar link',
'delete' => 'Eliminar',
'error' => 'Erro',
'errorMsg' => 'Algo correu mal. Por favor, tente novamente mais tarde.',
'oops' => 'Opa!',
'errorMsg' => 'Algo correu mal. Tenta novamente mais tarde.',
'oops' => 'Oops!',
'other' => 'Outro',
'readMore' => 'Ler mais',
'success' => 'Sucesso',
'proceed' => 'Continuar',
'next' => 'Seguinte',
'close' => 'Fechar',
'clickHere' => 'clique aqui',
'clickHere' => 'clica aqui',
'sensitive' => 'Sensível',
'sensitiveContent' => 'Conteúdo sensível',
'sensitiveContentWarning' => 'Este post pode conter conteúdo sensível',
'sensitiveContentWarning' => 'Esta publicação pode conter conteúdo sensível',
],
'site' => [
'terms' => 'Termos de Uso',
'terms' => 'Termos de Utilização',
'privacy' => 'Política de Privacidade',
],
'navmenu' => [
'search' => 'Pesquisa',
'admin' => 'Painel de Administração',
'search' => 'Pesquisar',
'admin' => 'Painel de administração',
// Timelines
'homeFeed' => 'Inicio',
'homeFeed' => 'Início',
'localFeed' => 'Feed local',
'globalFeed' => 'Feed global',
// Core features
'discover' => 'Descobrir',
'directMessages' => 'Mensagens Diretas',
'directMessages' => 'Mensagens diretas',
'notifications' => 'Notificações',
'groups' => 'Grupos',
'stories' => 'Stories',
// Self links
'profile' => 'Perfil',
'drive' => 'Drive',
'drive' => 'Disco',
'settings' => 'Definições',
'compose' => 'Criar novo',
'logout' => 'Terminar Sessão',
'logout' => 'Terminar sessão',
// Nav footer
'about' => 'Sobre',
@ -70,38 +70,38 @@ return [
'terms' => 'Termos',
// Temporary links
'backToPreviousDesign' => 'Voltar ao design anterior'
'backToPreviousDesign' => 'Voltar ao design antigo'
],
'directMessages' => [
'inbox' => 'Caixa de Entrada',
'inbox' => 'Caixa de entrada',
'sent' => 'Enviadas',
'requests' => 'Pedidos'
],
'notifications' => [
'liked' => 'curtiu seu',
'commented' => 'comentou em seu',
'liked' => 'gostou do seu',
'commented' => 'comentou no seu',
'reacted' => 'reagiu ao seu',
'shared' => 'compartilhou seu',
'tagged' => 'marcou você em um',
'shared' => 'partilhou o teu',
'tagged' => 'etiquetou-te numa publicação',
'updatedA' => 'atualizou um(a)',
'sentA' => 'enviou um',
'updatedA' => 'atualizou uma',
'sentA' => 'enviou uma',
'followed' => 'seguiu',
'mentioned' => 'mencionou',
'you' => 'você',
'followed' => 'seguiu-te',
'mentioned' => 'mencionou-te',
'you' => 'tu',
'yourApplication' => 'A sua candidatura para se juntar',
'yourApplication' => 'O teu pedido de adesão',
'applicationApproved' => 'foi aprovado!',
'applicationRejected' => 'foi rejeitado. Você pode se inscrever novamente para participar em 6 meses.',
'applicationRejected' => 'foi rejeitado. Podes voltar a candidatar-te dentro de 6 meses.',
'dm' => 'mensagem direta',
'groupPost' => 'postagem do grupo',
'dm' => 'md',
'groupPost' => 'publicação de grupo',
'modlog' => 'histórico de moderação',
'post' => 'publicação',
'story' => 'história',
'story' => 'estória',
'noneFound' => 'Nenhuma notificação encontrada',
],
@ -115,12 +115,12 @@ return [
'profile' => [
'posts' => 'Publicações',
'followers' => 'Seguidores',
'following' => 'A seguir',
'following' => 'Seguindo',
'admin' => 'Administrador',
'collections' => 'Coleções',
'follow' => 'Seguir',
'unfollow' => 'Deixar de seguir',
'editProfile' => 'Editar Perfil',
'editProfile' => 'Editar perfil',
'followRequested' => 'Pedido para seguir enviado',
'joined' => 'Juntou-se',
@ -137,72 +137,72 @@ return [
'unarchive' => 'Retirar do arquivo',
'embed' => 'Incorporar',
'selectOneOption' => 'Selecione uma das seguintes opções',
'selectOneOption' => 'Seleciona uma das seguintes opções',
'unlistFromTimelines' => 'Remover das cronologias',
'addCW' => 'Adicionar aviso de conteúdo',
'removeCW' => 'Remover aviso de conteúdo',
'markAsSpammer' => 'Marcar como Spammer',
'markAsSpammer' => 'Marcar como spammer',
'markAsSpammerText' => 'Remover das cronologias e adicionar um aviso de conteúdo às publicações existentes e futuras',
'spam' => 'Lixo Eletrônico',
'sensitive' => 'Conteúdo Sensível',
'spam' => 'Spam',
'sensitive' => 'Conteúdo sensível',
'abusive' => 'Abusivo ou prejudicial',
'underageAccount' => 'Conta de menor de idade',
'copyrightInfringement' => 'Violação de direitos de autor',
'impersonation' => 'Roubo de identidade',
'scamOrFraud' => 'Esquema ou fraude',
'confirmReport' => 'Confirmar denúncia',
'confirmReportText' => 'Tem a certeza que deseja denunciar esta mensagem?',
'confirmReportText' => 'Tens a certeza que desejas denunciar esta mensagem?',
'reportSent' => 'Denúncia enviada!',
'reportSentText' => 'Recebemos com sucesso a sua denúncia.',
'reportSentText' => 'Recebemos com sucesso a tua denúncia.',
'reportSentError' => 'Ocorreu um erro ao denunciar este conteúdo.',
'modAddCWConfirm' => 'Tem a certeza que pretende adicionar um aviso de conteúdo à publicação?',
'modCWSuccess' => 'Adicionou com sucesso um aviso de conteúdo',
'modRemoveCWConfirm' => 'Tem a certeza que pretende remover o aviso de conteúdo desta publicação?',
'modRemoveCWSuccess' => 'Removeu com sucesso o aviso de conteúdo',
'modAddCWConfirm' => 'Tens a certeza que pretendes adicionar um aviso de conteúdo à publicação?',
'modCWSuccess' => 'Adicionaste com sucesso um aviso de conteúdo',
'modRemoveCWConfirm' => 'Tens a certeza que pretendes remover o aviso de conteúdo desta publicação?',
'modRemoveCWSuccess' => 'Removeste com sucesso o aviso de conteúdo',
'modUnlistConfirm' => 'Tem a certeza que pretende deslistar este post?',
'modUnlistSuccess' => 'Deslistou com sucesso este post',
'modMarkAsSpammerConfirm' => 'Você realmente quer denunciar este usuário por spam? Todas as suas publicações anteriores e futuras serão marcadas com um aviso de conteúdo e removidas das linhas do tempo.',
'modMarkAsSpammerConfirm' => 'Tem a certeza que deseja marcar este utilizador como spammer? Todos os posts existentes e futuros serão deslistados da timeline e o alerta de conteúdo será aplicado.',
'modMarkAsSpammerSuccess' => 'Marcou com sucesso esta conta como spammer',
'toFollowers' => 'para seguidores',
'toFollowers' => 'para Seguidores',
'showCaption' => 'Mostar legenda',
'showLikes' => 'Mostrar Gostos',
'showLikes' => 'Mostrar gostos',
'compactMode' => 'Modo compacto',
'embedConfirmText' => 'Ao usar de forma “embed”, você concorda com nossas',
'embedConfirmText' => 'Ao utilizar este conteúdo, concordas com:',
'deletePostConfirm' => 'Tem a certeza que pretende apagar esta publicação?',
'archivePostConfirm' => 'Tem a certeza que pretende arquivar esta publicação?',
'deletePostConfirm' => 'Tens a certeza que pretendes eliminar esta publicação?',
'archivePostConfirm' => 'Tens a certeza que pretendes arquivar esta publicação?',
'unarchivePostConfirm' => 'Tem a certeza que pretende desarquivar este post?',
],
'story' => [
'add' => 'Adicionar Story'
'add' => 'Adicionar Storie'
],
'timeline' => [
'peopleYouMayKnow' => 'Pessoas que talvez conheça',
'peopleYouMayKnow' => 'Pessoas que talvez conheças',
'onboarding' => [
'welcome' => 'Bem-vindo',
'thisIsYourHomeFeed' => 'Este é o seu feed pessoal, com publicações em ordem cronológica das contas que segue.',
'letUsHelpYouFind' => 'Deixe-nos ajudar a encontrar algumas pessoas interessantes para seguir',
'refreshFeed' => 'Atualizar o meu feed',
'thisIsYourHomeFeed' => 'Este é a tua cronologia inicial pessoal, com publicações em ordem cronológica das contas que segue.',
'letUsHelpYouFind' => 'Deixa-nos ajudar-te a encontrar algumas pessoas interessantes para seguires',
'refreshFeed' => 'Atualizar a minha cronologia',
],
],
'hashtags' => [
'emptyFeed' => 'Não encontramos nenhuma publicação com esta hashtag'
'emptyFeed' => 'Não conseguimos encontrar publicações com essa hashtag'
],
'report' => [
'report' => 'Denunciar',
'selectReason' => 'Selecione uma razão',
'selectReason' => 'Seleciona um motivo',
'reported' => 'Denunciado',
'sendingReport' => 'A enviar denúncia',
'thanksMsg' => 'Obrigado pela denúncia, pessoas como você ajudam a manter a nossa comunidade segura!',
'contactAdminMsg' => 'Se quiser entrar em contato com um administrador acerca desta publicação ou denúncia',
'thanksMsg' => 'Obrigado pela denúncia, as pessoas como tu ajudam a manter a nossa comunidade segura!',
'contactAdminMsg' => 'Se quiseres entrar em contacto com um administrador sobre esta publicação ou denúncia',
],
];

View file

@ -29,9 +29,9 @@ return [
'close' => 'Закрыть',
'clickHere' => 'нажмите здесь',
'sensitive' => 'Чувствительный',
'sensitiveContent' => 'Чувствительный контент',
'sensitiveContentWarning' => 'Этот пост может содержать чувствительный контент',
'sensitive' => 'Вызывающий',
'sensitiveContent' => 'Вызывающее содержимое',
'sensitiveContentWarning' => 'Эта запись может содержать вызывающее содержимое',
],
'site' => [
@ -98,9 +98,9 @@ return [
'applicationRejected' => 'было отклонено. Вы можете повторно подать заявку на регистрацию в течение 6 месяцев.',
'dm' => 'сообщение',
'groupPost' => 'пост в группе',
'groupPost' => 'запись в группе',
'modlog' => 'журнал модерации',
'post' => 'пост',
'post' => 'запись',
'story' => 'история',
'noneFound' => 'Уведомления не найдены',
],
@ -108,12 +108,12 @@ return [
'post' => [
'shareToFollowers' => 'Поделиться с подписчиками',
'shareToOther' => 'Поделиться с другими',
'noLikes' => 'Пока никому не понравилось',
'noLikes' => 'Пока нет лайков',
'uploading' => 'Загружается',
],
'profile' => [
'posts' => 'Посты',
'posts' => 'Записи',
'followers' => 'Подписчики',
'following' => 'Подписки',
'admin' => 'Администратор',
@ -129,7 +129,7 @@ return [
],
'menu' => [
'viewPost' => 'Показать пост',
'viewPost' => 'Показать запись',
'viewProfile' => 'Посмотреть профиль',
'moderationTools' => 'Инструменты модерации',
'report' => 'Пожаловаться',
@ -146,23 +146,23 @@ return [
'spam' => 'Спам',
'sensitive' => 'Деликатный контент',
'abusive' => 'Жестокое обращение или причинение вреда',
'underageAccount' => 'Несовершеннолетний аккаунт',
'underageAccount' => 'Профиль несовершеннолетнего',
'copyrightInfringement' => 'Нарушение авторских прав',
'impersonation' => 'Представление себя за другого человека',
'scamOrFraud' => 'Обман или мошенничество',
'confirmReport' => 'Подтвердить жалобу',
'confirmReportText' => 'Вы действительно хотите пожаловаться на этот пост?',
'confirmReportText' => 'Вы действительно хотите пожаловаться на эту запись?',
'reportSent' => 'Жалоба отправлена!',
'reportSentText' => 'Мы успешно получили Вашу жалобу.',
'reportSentError' => 'При отправке жалобы на этот пост произошла ошибка.',
'reportSentError' => 'При отправке жалобы на эту запись произошла ошибка.',
'modAddCWConfirm' => 'Вы действительно хотите добавить предупреждение о контенте на этот пост?',
'modAddCWConfirm' => 'Вы действительно хотите добавить предупреждение о содержимом на этой записи?',
'modCWSuccess' => 'Предупреждение о контенте успешно добавлено',
'modRemoveCWConfirm' => 'Вы действительно хотите удалить предупреждение о контенте с этого поста?',
'modRemoveCWConfirm' => 'Вы действительно хотите удалить предупреждение о содержимом с этой записи?',
'modRemoveCWSuccess' => 'Предупреждение о контенте успешно удалено',
'modUnlistConfirm' => 'Вы действительно хотите скрыть этот пост из лент?',
'modUnlistSuccess' => 'Пост удален',
'modMarkAsSpammerConfirm' => 'Вы уверены, что хотите отметить этого пользователя спамом? Все существующие и будущие сообщения будут исключены из списка в сроки, и будет применяться предупреждение о содержании.',
'modUnlistConfirm' => 'Вы действительно хотите скрыть эту запись со всех лент?',
'modUnlistSuccess' => 'Запись скрыта',
'modMarkAsSpammerConfirm' => 'Вы уверены, что хотите отметить этого пользователя как спамера? Все существующие и будущие сообщения будут скрыты в лентах и будет применяться предупреждение о содержании.',
'modMarkAsSpammerSuccess' => 'Аккаунт успешно помечен как спаммер',
'toFollowers' => 'подписчикам',
@ -186,7 +186,7 @@ return [
'onboarding' => [
'welcome' => 'Добро пожаловать',
'thisIsYourHomeFeed' => 'Это ваша домашняя лента, где хронологически собраны посты с аккаунтов, на которые вы подписаны.',
'thisIsYourHomeFeed' => 'Это ваша домашняя лента, где хронологически собраны записи от профилей на которые вы подписаны.',
'letUsHelpYouFind' => 'Давайте мы поможем вам найти интересных людей, на которых можно подписаться',
'refreshFeed' => 'Обновить мою ленту',
],
@ -202,7 +202,7 @@ return [
'reported' => 'Жалоба отправлена',
'sendingReport' => 'Отправка жалобы',
'thanksMsg' => 'Спасибо за обращение! Такие, как вы, помогают сделать сообщество безопаснее!',
'contactAdminMsg' => 'Хотите ли вы связаться с администратором по поводу этой публикации или жалобы',
'contactAdminMsg' => 'Хотите ли вы связаться с администратором по поводу этой публикации или пожаловаться',
],
];

File diff suppressed because it is too large Load diff

View file

@ -48,12 +48,15 @@ if($displayName && $captionPreview) {
@push('meta')@if($mediaCount && $s['pf_type'] === "photo" || $s['pf_type'] === "photo:album")
<meta property="og:image" content="{{$s['media_attachments'][0]['url']}}">
<meta name="twitter:card" content="summary_large_image">
@elseif($mediaCount && $s['pf_type'] === "video" || $s['pf_type'] === "video:album")<meta property="og:video" content="{{$s['media_attachments'][0]['url']}}">
<meta name="twitter:card" content="summary">
@else
<meta name="twitter:card" content="summary">
@endif<meta property="og:description" content="{{ $ogDescription }}">
<meta property="og:published_time" content="{{$s['created_at']}}">
<meta property="profile:username" content="{{ $wf }}">
<link href='{{$s['url']}}' rel='alternate' type='application/activity+json'>
<meta name="twitter:card" content="summary">
<meta name="description" content="{{ $ogDescription }}">
@endpush