Browse Source

Merge pull request #6022 from pixelfed/staging

Staging
(dan)iel (sup)ernault 1 month ago
parent
commit
d926ea99e0

+ 8 - 25
.github/workflows/laravel.yml

@@ -9,9 +9,11 @@ on:
 jobs:
 jobs:
   tests:
   tests:
     runs-on: ubuntu-latest
     runs-on: ubuntu-latest
+
     strategy:
     strategy:
       matrix:
       matrix:
         php: [ '8.3' ]
         php: [ '8.3' ]
+
     steps:
     steps:
       - name: Checkout code
       - name: Checkout code
         uses: actions/checkout@v4
         uses: actions/checkout@v4
@@ -20,36 +22,17 @@ jobs:
         uses: shivammathur/setup-php@v2
         uses: shivammathur/setup-php@v2
         with:
         with:
           php-version: ${{ matrix.php }}
           php-version: ${{ matrix.php }}
-          extensions: mbstring, sqlite, xml, ctype, json, openssl
-          ini-values: post_max_size=256M, memory_limit=512M
-
-      - name: Cache Composer dependencies
-        uses: actions/cache@v3
-        with:
-          path: vendor
-          key: composer-${{ hashFiles('**/composer.lock') }}
+          extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite, bcmath, soap, intl, gd, exif, iconv
+          coverage: none
 
 
       - name: Install Composer dependencies
       - name: Install Composer dependencies
-        run: composer install --no-progress --no-suggest --prefer-dist -n
+        run: composer install -n --prefer-dist
 
 
-      - name: Copy .env and generate key
+      - name: Copy .env.testing
         run: |
         run: |
-          cp .env.example .env
+          cp .env.testing .env
           php artisan key:generate
           php artisan key:generate
 
 
-      - name: Prepare SQLite database
-        run: |
-          touch database/database.sqlite
-          php artisan migrate --env=testing --force --database=sqlite
-
       - name: Run tests
       - name: Run tests
-        run: |
-          php artisan test --env=testing --log-junit=tests/_output/junit.xml
+        run: php artisan test
         continue-on-error: false
         continue-on-error: false
-
-      - name: Upload JUnit test results
-        if: always()
-        uses: actions/upload-artifact@v3
-        with:
-          name: junit-results
-          path: tests/_output/junit.xml

+ 1 - 0
app/Http/Controllers/CuratedRegisterController.php

@@ -9,6 +9,7 @@ use App\Models\CuratedRegisterActivity;
 use App\Services\EmailService;
 use App\Services\EmailService;
 use App\Util\Lexer\RestrictedNames;
 use App\Util\Lexer\RestrictedNames;
 use Illuminate\Http\Request;
 use Illuminate\Http\Request;
+use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Mail;
 use Illuminate\Support\Facades\Mail;
 use Illuminate\Support\Str;
 use Illuminate\Support\Str;
 
 

+ 0 - 3
app/Rules/Webfinger.php

@@ -44,9 +44,6 @@ class WebFinger implements Rule
             return false;
             return false;
         }
         }
 
 
-        // Optional: Check if domain resolves (can be enabled for stricter validation)
-        // return checkdnsrr($domain, 'A') || checkdnsrr($domain, 'AAAA') || checkdnsrr($domain, 'MX');
-
         return true;
         return true;
     }
     }
 
 

+ 5 - 2
composer.json

@@ -53,7 +53,7 @@
         "laravel/telescope": "^5.5",
         "laravel/telescope": "^5.5",
         "mockery/mockery": "^1.6",
         "mockery/mockery": "^1.6",
         "nunomaduro/collision": "^8.8",
         "nunomaduro/collision": "^8.8",
-        "phpunit/phpunit": "^11.0.1"
+        "pestphp/pest": "^3.8"
     },
     },
     "autoload": {
     "autoload": {
         "classmap": [
         "classmap": [
@@ -100,7 +100,10 @@
     "config": {
     "config": {
         "preferred-install": "dist",
         "preferred-install": "dist",
         "sort-packages": true,
         "sort-packages": true,
-        "optimize-autoloader": true
+        "optimize-autoloader": true,
+        "allow-plugins": {
+            "pestphp/pest-plugin": true
+        }
     },
     },
     "prefer-stable": true
     "prefer-stable": true
 }
 }

File diff suppressed because it is too large
+ 899 - 138
composer.lock


BIN
public/_lang/fr.json


+ 2 - 2
resources/assets/components/partials/navbar.vue

@@ -237,10 +237,10 @@
                                         </li>
                                         </li>
 
 
                                         <li class="nav-item">
                                         <li class="nav-item">
-                                            <router-link class="nav-link" to="/settings/home">
+                                            <a class="nav-link" href="/settings/home">
                                                 <span class="icon text-lighter"><i class="far fa-cog"></i></span>
                                                 <span class="icon text-lighter"><i class="far fa-cog"></i></span>
                                                 {{ $t('navmenu.settings') }}
                                                 {{ $t('navmenu.settings') }}
-                                            </router-link>
+                                            </a>
                                         </li>
                                         </li>
 
 
                                         <li v-if="user.is_admin" class="nav-item">
                                         <li v-if="user.is_admin" class="nav-item">

+ 6 - 1
resources/assets/js/components/ComposeModal.vue

@@ -681,7 +681,12 @@
                                   <img :src="collection.thumb" class="mr-3" alt="" width="50px" height="50px">
                                   <img :src="collection.thumb" class="mr-3" alt="" width="50px" height="50px">
                                   <div class="media-body">
                                   <div class="media-body">
                                     <h5 class="mt-0">{{ collection.title }}</h5>
                                     <h5 class="mt-0">{{ collection.title }}</h5>
-                                    <p class="mb-0 text-muted small">{{ collection.post_count }} Posts - Created {{ timeAgo(collection.published_at) }} ago</p>
+                                    <p class="mb-0 text-muted small">
+                                      <span>{{ collection.post_count }} Posts
+                                      <span>&middot;</span>
+                                      <span v-if="collection.visibility === 'draft'" class="primary"><i class="far fa-lock fa-sm"></i> {{ $t("profile.draft")}}</span>
+                                      <span v-else>Created {{ timeago(collection.published_at) }} ago</span>
+                                    </p>
                                   </div>
                                   </div>
                                 </div>
                                 </div>
                             </div>
                             </div>

+ 1 - 1
resources/assets/js/components/StoryViewer.vue

@@ -236,7 +236,7 @@
 					</button>
 					</button>
 				</div>
 				</div>
 				<div v-if="owner" class="list-group-item rounded cursor-pointer" @click="fetchViewers">{{ $t("story.viewers")}}</div>
 				<div v-if="owner" class="list-group-item rounded cursor-pointer" @click="fetchViewers">{{ $t("story.viewers")}}</div>
-				<div v-if="!owner" class="list-group-item rounded cursor-pointer" @click="ctxMenuReport">>{{ $t("story.report")}}</div>
+				<div v-if="!owner" class="list-group-item rounded cursor-pointer" @click="ctxMenuReport">{{ $t("story.report")}}</div>
 				<div v-if="owner" class="list-group-item rounded cursor-pointer" @click="deleteStory">{{ $t("story.delete")}}</div>
 				<div v-if="owner" class="list-group-item rounded cursor-pointer" @click="deleteStory">{{ $t("story.delete")}}</div>
 				<div class="list-group-item rounded cursor-pointer text-muted" @click="closeCtxMenu">{{ $t("story.close")}}</div>
 				<div class="list-group-item rounded cursor-pointer text-muted" @click="closeCtxMenu">{{ $t("story.close")}}</div>
 			</div>
 			</div>

+ 3 - 3
resources/lang/fa/web.php

@@ -57,7 +57,7 @@ return [
 
 
 		// Self links
 		// Self links
 		'profile' => 'نمایه',
 		'profile' => 'نمایه',
-		'drive' => 'Drive',
+		'drive' => 'گرداننده',
 		'settings' => 'تنظیمات',
 		'settings' => 'تنظیمات',
 		'compose' => 'فرستهٔ جدید',
 		'compose' => 'فرستهٔ جدید',
 		'logout' => 'خروج',
 		'logout' => 'خروج',
@@ -97,9 +97,9 @@ return [
 		'applicationApproved' => 'تایید شد!',
 		'applicationApproved' => 'تایید شد!',
 		'applicationRejected' => 'رد شد. ۶ ماه دیگر می‌توانید دوباره درخواست کنید.',
 		'applicationRejected' => 'رد شد. ۶ ماه دیگر می‌توانید دوباره درخواست کنید.',
 
 
-		'dm' => 'dm',
+		'dm' => 'پم',
 		'groupPost' => 'فرستهٔ گروهی',
 		'groupPost' => 'فرستهٔ گروهی',
-		'modlog' => 'modlog',
+		'modlog' => 'گزارش مدیر',
 		'post' => 'فرسته',
 		'post' => 'فرسته',
 		'story' => 'داستان',
 		'story' => 'داستان',
 		'noneFound' => 'هیچ آگاهی‌ای پیدا نشد',
 		'noneFound' => 'هیچ آگاهی‌ای پیدا نشد',

+ 1 - 0
resources/lang/fr/auth.php

@@ -14,4 +14,5 @@ return [
 
 
     'failed'      =>    'Ces informations d\'identification ne correspondent à aucune se trouvant dans notre base de données.',
     'failed'      =>    'Ces informations d\'identification ne correspondent à aucune se trouvant dans notre base de données.',
     'throttle'    =>    'Trop de tentatives de connexion ont été effectuées. Veuillez réessayer dans :seconds secondes.',
     'throttle'    =>    'Trop de tentatives de connexion ont été effectuées. Veuillez réessayer dans :seconds secondes.',
+    'verifyYourEmailAddress' => ' - Vérifiez votre adresse de courrier électronique',
 ];
 ];

+ 1 - 0
resources/lang/fr/navmenu.php

@@ -7,6 +7,7 @@ return [
     'network'           =>    'Réseau',
     'network'           =>    'Réseau',
     'discover'          =>    'Découvrir',
     'discover'          =>    'Découvrir',
     'viewMyProfile'     =>    'Voir mon profil',
     'viewMyProfile'     =>    'Voir mon profil',
+	'myProfile'			=> 'Mon profil',
     'myTimeline'        =>    'Ma Chronologie',
     'myTimeline'        =>    'Ma Chronologie',
     'publicTimeline'    =>    'Chronologie Publique',
     'publicTimeline'    =>    'Chronologie Publique',
     'remoteFollow'      =>    'Suivre à distance',
     'remoteFollow'      =>    'Suivre à distance',

+ 6 - 0
resources/lang/fr/profile.php

@@ -12,4 +12,10 @@ return [
 
 
     'status.disabled.header'    =>    'Profil indisponible',
     'status.disabled.header'    =>    'Profil indisponible',
     'status.disabled.body'      =>    'Désolé, ce profil n’est pas disponible pour le moment. Veuillez réessayer plus tard.',
     'status.disabled.body'      =>    'Désolé, ce profil n’est pas disponible pour le moment. Veuillez réessayer plus tard.',
+
+  'block.domain.max'      => 'Vous avez atteint la limite du nombre de domaines bloqués, qui est de :max domaines. Contactez votre administrateur pour ajuster ce paramètre.',
+
+  'mutedAccounts'           => 'Comptes masqués',
+  'blockedAccounts'         => 'Comptes bloqués',
+  'blockedDomains'          => 'Domaines bloqués',
 ];
 ];

+ 195 - 0
resources/lang/fr/settings.php

@@ -0,0 +1,195 @@
+<?php
+
+return [
+    'account' =>                'Compte',
+    'accessibility' =>          'Accessibilité',
+    'email' =>                  'Courrier électronique',
+    'invites' =>                'Invites',
+    'media' =>                  'Média',
+    'notifications' =>          'Notifications',
+    'password' =>               'Mot de passe',
+    'privacy' =>                'Confidentialité',
+    'relationships' =>          'Relations',
+    'security' =>               'Sécurité',
+    'timelines' =>              'Fil d’actualité',
+    'applications' =>           'Applications',
+    'developers' =>             'Développement',
+    'import' =>                 'Import',
+    'export' =>                 'Export',
+    'labs' =>                   'Labo',
+    'parental_controls' =>      'Contrôle parental',
+
+    'submit' =>                 'Enregistrer',
+    'error' =>                  'Erreur',
+    'cancel' =>                 'Annuler',
+    'save' =>                   'Enregistrer',
+    'download' =>               'Télécharger',
+
+    'home.account_settings' =>                                          'Paramètres de compte',
+    'home.change_profile_photo' =>                                      'Changer votre photo de profil',
+    'home.select_a_profile_photo' =>                                    'Choisir une photo de profil',
+    'home.must_be_a_jpeg_or_png_max_avatar_size' =>                     'Doit être un JPEG ou PNG. Taille maximale :',
+    'home.upload' =>                                                    'Envoyer',
+    'home.delete_profile_photo' =>                                      'Supprimer votre photo de profil',
+    'home.name' =>                                                      'Nom',
+    'home.your_name' =>                                                 'Votre nom',
+    'home.website' =>                                                   'Site web',
+    'home.bio' =>                                                       'Présentation',
+    'home.add_a_bio_here' =>                                            'Ajoutez une présentation ici',
+    'home.language' =>                                                  'Langue',
+    'home.pronouns' =>                                                  'Pronoms',
+    'home.select_pronouns' =>                                           'Sélectionnez votre ou vos pronom(s)',
+    'home.select_up_to_4_pronouns_that_will_appear_on_etc' =>           'Choisissez jusqu’à 4 pronoms qui s’afficheront sur votre profil.',
+    'home.account_aliases' =>                                           'Alias de compte',
+    'home.manage_account_alias' =>                                      'Gérez les alias de compte',
+    'home.to_move_from_another_account_to_this_one_first_etc' =>        'Pour déménager d’un autre compte vers celui-ci, vous devez d’abord créer un alias.',
+    'home.account_migrate' =>                                           'Migration de compte',
+    'home.migrate_to_another_account' =>                                'Migrer vers un autre compte',
+    'home.to_redirect_this_account_to_a_different_one_etc' =>           'Pour déménager ce compte vers un autre (là où c’est pris en charge).',
+    'home.storage_usage' =>                                             'Utilisation de l’espace de stockage',
+    'home.storage_used' =>                                              'Stockage consommé',
+    'home.are_you_sure_you_want_to_delete_your_profile_photo' =>        'Êtes-vous sûr⋅e de vouloir supprimer votre photo de profil ?',
+    'home.an_error_occured_please_try_again_later' =>                   'Une erreur est survenue, merci de retenter prochainement',
+
+    'accessibility.reduce_motion' =>                                    'Réduire les mouvements',
+    'accessibility.prevent_animation_effects' =>                        'Empêcher les effets d’animation.',
+    'accessibility.high_contrast_mode' =>                               'Augmenter les contrastes',
+    'accessibility.high_contrast_mode_for_the_visually_impaired' =>     'Mode de contraste élevé pour les malvoyants.',
+    'accessibility.disable_video_autoplay' =>                           'Désactiver la lecture automatique des photos',
+    'accessibility.prevent_videos_from_autoplaying' =>                  'Empêcher les vidéos de se lancer automatiquement.',
+
+    'email.email_settings' =>                                           'Paramètres de courrier électronique',
+    'email.email_address' =>                                            'Adresse de courrier électronique',
+    'email.verified' =>                                                 'Vérifié',
+    'email.unverified' =>                                               'Non vérifié',
+    'email.you_need_to' =>                                              'Vous devez',
+    'email.verify_your_email' =>                                        'vérifier votre adresse',
+
+    'media.default_license' =>                                          'Licence par défaut',
+    'media.set_a_default_license_for_new_posts' =>                      'Choisissez une licence par défaut pour vos prochaines publications.',
+    'media.sync_licenses' =>                                            'Changer la licence',
+    'media.update_existing_posts_with_your_new_default_etc' =>          'Remplacer la licence de vos précédentes publications par celle nouvellement choisie. Vous pouvez changer une seule fois par jour.',
+    'media.license_changes_may_not_be_reflected_on_remote_servers' =>   'Il se peut que la license ne soit pas modifiée sur les serveurs distants.',
+    'media.require_media_descriptions' =>                               'Exiger des descriptions de média',
+    'media.briefly_describe_your_media_to_improve_etc' =>               'Décrivez brièvement vos médias afin d’améliorer l’accessibilité pour les malvoyants.',
+    'media.not_available_for_mobile_or_3rd_party_apps_etc' =>           'Pas encore disponible sur mobile ou sur les applications tierces pour le moment.',
+
+    'password.update_password' =>                                       'Modifier le mot de passe',
+    'password.current' =>                                               'Actuel',
+    'password.your_current_password' =>                                 'Saisissez votre mot de passe actuel ici',
+    'password.new' =>                                                   'Nouveau',
+    'password.enter_new_password_here' =>                               'Saisissez votre nouveau mot de passe ici',
+    'password.confirm' =>                                               'Confirmation',
+    'password.confirm_new_password' =>                                  'Saisissez une seconde fois votre nouveau mot de passe pour le confirmer',
+
+    'privacy.privacy_settings' =>                                       'Paramètres de confidentilité et vie privée',
+    'privacy.private_account' =>                                        'Compte privé',
+    'privacy.when_your_account_is_private_only_people_you_etc' =>       'Quand votre compte est privé, seuls les personnes que vous approuvez peuvent voir vos photos et vidéos sur Pixelfed. Vos abonnés actuels ne seront pas affectés par le changement.',
+    'privacy.disable_search_engine_indexing' =>                         'Désactiver l’indexation par les moteurs de recherche',
+    'privacy.when_your_account_is_visible_to_search_engines_etc' =>     'Quand votre compte est visible par les moteurs de recherche, ils peuvent explorer et stocker vos informations.',
+    'privacy.not_available_when_your_account_is_private' =>             'Non disponible lorsque votre compte est privé',
+    'privacy.include_public_posts_in_search_results' =>                 'Inclure vos contenus publics dans les résultats de recherche',
+    'privacy.your_public_posts_may_appear_in_search_results_etc' =>     'Vos messages publics peuvent apparaître dans les résultats de recherche sur Pixelfed et Mastodon. Les personnes qui ont interagi avec vos messages peuvent être en mesure de les rechercher quel que soit ce paramètre.',
+    'privacy.show_on_directory' =>                                      'Apparaître dans l’annuaire',
+    'privacy.when_this_option_is_enabled_your_profile_is_etc' =>        'Quand cette option est activée, votre profil est inclus dans l’annuaire. Seuls les profils publics sont éligibles.',
+    'privacy.receive_direct_messages_from_anyone' =>                    'Recevoir des messages directs de tout le monde',
+    'privacy.if_selected_you_will_be_able_to_receive_messages_etc' =>   'Si coché, vous pourrez recevoir des messages et notifications de tous les utilisateurs, même si vous ne les suivez pas.',
+    'privacy.hide_sensitive_content_from_search_results' =>             'Cacher le contenu sensible des résultats de recherche',
+    'privacy.this_prevents_posts_with_potentially_sensitive_etc' =>     'Cette option empêche les publications avec un contenu potentiellement sensible de s’afficher dans vos résultats de recherche.',
+    'privacy.remove_blocked_and_muted_accounts' =>                      'Supprimer les comptes bloqués et masqués',
+    'privacy.use_this_to_eliminate_search_results_from_accounts_etc' => 'Cette option élimine des résultats de recherche les comptes que vous avez bloqués ou masqués.',
+    'privacy.display_media_that_may_contain_sensitive_content' =>       'Montrer les publications potentiellement sensibles',
+    'privacy.show_all_media_including_potentially_sensitive_content' => 'Afficher tous les médias, même ceux qui pouvant contenir des élèments sensible.',
+    'privacy.show_follower_count' =>                                    'Montrer le nombre d’abonnés',
+    'privacy.display_follower_count_on_profile' =>                      'Afficher sur votre profil le nombre de comptes qui vous suivent',
+    'privacy.show_following_count' =>                                   'Montrer le nombre d’abonnements',
+    'privacy.display_following_count_on_profile' =>                     'Afficher sur votre profil le nombre de comptes que vous suivez',
+    'privacy.disable_embeds' =>                                         'Désactiver les intégrations',
+    'privacy.disable_post_and_profile_embeds' =>                        'Empêcher d’intégrer vos publications et votre profil sur d’autres sites',
+    'privacy.enable_atom_feed' =>                                       'Activer le flux atom',
+    'privacy.enable_your_profile_atom_feed_only_public_profiles_etc' => 'Activer le flux atom de votre profil. Seuls les profils publics sont éligibles.',
+    'privacy.confirm_this_action' =>                                    'Confirmez cette action',
+    'privacy.please_select_the_type_of_private_account_you_etc' =>      'Merci de sélectionner le type de compte privé que vous souhaitez :',
+    'privacy.keep_existing_followers' =>                                'Garder les abonnés existants',
+    'privacy.only_keep_mutual_followers' =>                             'Ne garder que les abonnements mutuels',
+    'privacy.only_followers_that_have_followed_you_for_atleast' =>      'Ne garder que les abonnés qui vous suivent depuis au moins :',
+    'privacy.hour' =>                                                   'heure',
+    'privacy.day' =>                                                    'jour',
+    'privacy.weeks' =>                                                  'semaines',
+    'privacy.month' =>                                                  'mois',
+    'privacy.months' =>                                                 'mois',
+    'privacy.year' =>                                                   'année',
+    'privacy.remove_existing_followers' =>                              'Retirer les abonnés actuels',
+    'privacy.allow_new_follow_requests' =>                              'Autoriser les nouvelles demandes d’abonnement',
+    'privacy.block_notifications_from_accounts_i_dont_follow' =>        'Bloquer les notifications de comptes auxquels je ne suis pas abonné⋅e',
+    'privacy.an_error_occured_please_try_again' =>                      'Une erreur est survenue. Merci d’essayer à nouveau.',
+
+    'relationships' =>                                                          'Relations',
+    'relationships.followers' =>                                                'Abonnés',
+    'relationships.following' =>                                                'Abonnements',
+    'relationships.hashtags' =>                                                 'Hashtags (mots-dièse)',
+    'relationships.hashtag' =>                                                  'Hashtag',
+    'relationships.username' =>                                                 'Identifiant',
+    'relationships.action' =>                                                   'Action',
+    'relationships.unfollow' =>                                                 'Ne plus suivre',
+    'relationships.mute' =>                                                     'Masquer',
+    'relationships.block' =>                                                    'Bloquer',
+    'relationships.mute_successful' =>                                          'Succès du masquage',
+    'relationships.you_have_successfully_muted_that_user' =>                    'Vous avez masqué ce compte avec succès',
+    'relationships.block_successful' =>                                         'Succès du blocage',
+    'relationships.you_have_successfully_blocked_that_user' =>                  'Vous avez bloqué ce compte avec succès',
+    'relationships.unfollow_successful' =>                                      'Succès du désabonnement',
+    'relationships.you_have_successfully_unfollowed_that_user' =>               'Vous vous êtes désabonné⋅e de ce compte avec succès',
+    'relationships.an_error_occured_when_attempting_to_unfollow_this_user' =>   'Une erreur est survenue en tentant de se désabonner de ce compte',
+    'relationships.you_have_successfully_unfollowed_that_hashtag' =>            'Vous vous êtes désabonné⋅e de ce hashtag avec succès',
+
+    'security.two_factor_authentication' =>                                     'Authentification à deux facteurs',
+    'security.enabled' =>                                                       'Activé',
+    'security.danger_zone' =>                                                   'Zone à risque',
+    'security.temporarily_disable_account' =>                                   'Désactiver temporairement le compte',
+    'security.disable_your_account_to_hide_your_posts_until_next_log_in' =>     'Désactivez votre compte pour cacher vos publications jusqu’à la prochaine connexion.',
+    'security.disable' =>                                                       'Désactiver',
+    'security.delete_this_account' =>                                           'Supprimer ce compte',
+    'security.once_you_delete_your_account_there_is_no_going_back_etc' =>       'Une fois que vous avez supprimé votre compte, il n’y a plus de retour en arrière. Soyez sûr⋅e de vous !',
+    'security.delete' =>                                                        'Supprimer',
+    'security.account_log' =>                                                   'Journal des connexions',
+    'security.no_activity_logs_found' =>                                        'Aucune activité trouvée !',
+    'security.ip_address' =>                                                    'Adresse IP',
+    'security.user_agent' =>                                                    'Agent utilisateur:',
+    'security.devices' =>                                                       'Appareils',
+    'security.ip' =>                                                            'IP :',
+    'security.device' =>                                                        'Appareil :',
+    'security.browser' =>                                                       'Navigateur :',
+    'security.last_login' =>                                                    'Dernière connexion :',
+    'security.country' =>                                                       'Pays :',
+    'security.trust' =>                                                         'Faire confiance',
+    'security.remove_device' =>                                                 'Supprimer l’appareil',
+    'security.timeline_settings' =>                                             'Paramètres du fil d’actualité',
+    'security.show_text_only_posts' =>                                          'Voir les publications sans médias',
+    'security.show_text_only_posts_from_accounts_you_follow_home_etc' =>        'Afficher les publications même si elles ne contiennent que du texte pour les comptes que vous suivez. (Seulement dans le fil principal)',
+    'security.show_replies' =>                                                  'Voir les réponses',
+    'security.show_replies_from_accounts_you_follow_home_timeline_only' =>      'Afficher les réponses des comptes que vous suivez. (Seulement dans le fil principal)',
+    'security.show_reblogs' =>                                                  'Voir les partages',
+    'security.see_reblogs_from_accounts_you_follow_in_your_home_etc' =>         'Afficher les partages des comptes que vous suivez. (Seulement dans le fil principal)',
+    'security.photo_reblogs_only' =>                                            'Uniquement les partages de photos',
+    'security.only_see_reblogs_of_photos_or_photo_albums_home_etc' =>           'N’afficher que les partages de photos ou d’albums. (Seulement dans le fil principal)',
+
+    // incomplete
+    // the oauth panel is loaded from elsewhere
+    'developers.oauth_has_not_been_enabled_on_this_instance' =>                 'OAuth n’a pas été activé sur cette instance.',
+
+    // incomplete
+    // import/ig.blade.php seems not in use anymore
+    'import.import_from_instagram' =>                                           'Importer depuis Instagram',
+
+    'export.data_export' =>                                                     'Export de données',
+    'export.we_generate_data_exports_once_per_hour_and_they_may_etc' =>         'Nous générons des exports de données une fois par heure, et ils peuvent ne pas contenir les données les plus récentes si vous les avez récemment demandées.',
+    'export.statuses' =>                                                        'Publications',
+    'export.mute_block_lists' =>                                                'Masquages et blocages',
+
+    // incomplete
+    // some language outside the blades (in app/Http/Controllers/Settings/LabsSettings.php)
+    'labs' =>                                                                   'Labo',
+    'labs.experimental_features' =>                                             'Fonctionnalités expérimentales',
+    'labs.use_dark_mode_theme' =>                                               'Utiliser le thème sombre.',
+];

+ 53 - 0
resources/lang/fr/site.php

@@ -1,6 +1,7 @@
 <?php
 <?php
 
 
 return [
 return [
+
     'about'            =>    'À propos',
     'about'            =>    'À propos',
     'help'             =>    'Aide',
     'help'             =>    'Aide',
     'language'         =>    'Langue',
     'language'         =>    'Langue',
@@ -13,4 +14,56 @@ return [
     'selectLocale'     =>    'Sélectionnez l\'une des langues prises en charge',
     'selectLocale'     =>    'Sélectionnez l\'une des langues prises en charge',
     'contact'          =>    'Contact',
     'contact'          =>    'Contact',
     'contact-us'       =>    'Nous contacter',
     'contact-us'       =>    'Nous contacter',
+    'places'            => 'Places',
+    'profiles'          => 'Profiles',
+
+    // site/contact
+    'you_can_contact_the_admins'                            => 'You can contact the admins',
+    'by_using_the_form_below'                               => 'by using the form below',
+    'or'                                                    => 'or',
+    'by_sending_an_email_to'                                => 'by sending an email to',
+    'the_admins_have_not_set_a_contact_email_address'       => 'The admins have not set a contact email address',
+    'Message'                                               => 'Message',
+    'request_response_from_admins'                          => 'Request response from admins',
+    'Submit'                                                => 'Submit',
+    'log_in_to_send_a_message'                              => 'log in to send a message',
+    'Please'                                                => 'Please',
+
+    // site/about
+    'photo_sharing_for_everyone'                            => 'Photo Sharing. For Everyone',
+    'pixelfed_is_an_image_sharing_platform_etc'             => 'Pixelfed is an image sharing platform, an ethical alternative to centralized platforms.', // this is actually never used because it's a fallback for config_cache('app.description') and config_cache('app.short_description') which seem to be impossible to set to empty when saved via /admin/settings?t=branding
+    'feature_packed'                                        => 'Feature Packed.',
+    'the_best_for_the_brightest'                            => 'The best for the brightest 📸',
+    'albums'                                                => 'Albums',
+    'share_posts_with_up_to'                                => 'Share posts with up to',
+    'photos'                                                => 'photos',
+    'comments'                                              => 'Comments',
+    'comment_on_a_post_or_send_a_reply'                     => 'Comment on a post, or send a reply',
+    'collections'                                           => 'Collections',
+    'organize_and_share_collections_of_multiple_posts'      => 'Organize and share collections of multiple posts',
+    'discover'                                              => 'Discover',
+    'explore_categories_hashtags_and_topics'                => 'Explore categories, hashtags and topics',
+    'photo_filters'                                         => 'Photo Filters',
+    'add_a_special_touch_to_your_photos'                    => 'Add a special touch to your photos',
+    'stories'                                               => 'Stories',
+    'share_moments_with_your_followers_that_disappear_etc'  => 'Share moments with your followers that disappear after 24 hours',
+    'people_have_shared'                                    => 'people have shared',
+    'photos_and_videos_on'                                  => 'photos and videos on',
+    'sign_up_today'                                         => 'Sign up today',
+    'and_join_our_community_of_photographers_from_etc'      => 'and join our community of photographers from around the world.',
+
+    // site/fediverse
+    'is_a_portmanteau_of_federation_and_universe_etc'       => 'is a portmanteau of “federation” and “universe”. It is a common, informal name for a federation of social network servers, specializing in different types of media.',
+    'supported_fediverse_projects'                          => 'Supported Fediverse Projects',
+    'some_of_the_better_known_fediverse_projects_include'   => 'Some of the better known fediverse projects include:',
+    'a_federated_microblogging_alternative'                 => 'A federated microblogging alternative.',
+
+    // site/opensource
+    'the_software_that_powers_this_website_is_called'       => 'The software that powers this website is called',
+    'and_anyone_can'                                        => 'and anyone can',
+    'download'                                              => 'download',
+    'opensource.or'                                         => 'or',
+    'view'                                                  => 'view',
+    'the_source_code_and_run_their_own_instance'            => 'the source code and run their own instance!',
+    'open_source_in_pixelfed'                               => 'Open source in Pixelfed',
 ];
 ];

+ 17 - 0
resources/lang/fr/web.php

@@ -59,6 +59,7 @@ return [
 		'profile' => 'Profil',
 		'profile' => 'Profil',
 		'drive' => 'Médiathèque',
 		'drive' => 'Médiathèque',
 		'settings' => 'Paramètres',
 		'settings' => 'Paramètres',
+		'appearance' => 'Apparence',
 		'compose' => 'Publier',
 		'compose' => 'Publier',
 		'logout' => 'Déconnexion',
 		'logout' => 'Déconnexion',
 
 
@@ -205,4 +206,20 @@ return [
 		'contactAdminMsg' => 'Si vous souhaitez contacter un·e administrateur·trice à propos de cette publication ou de ce signalement',
 		'contactAdminMsg' => 'Si vous souhaitez contacter un·e administrateur·trice à propos de cette publication ou de ce signalement',
 	],
 	],
 
 
+    'appearance' => [
+        'theme' => 'Thème',
+        'profileLayout' => 'Disposition du profil',
+        'compactPreviews' => 'Prévisualisation compacte',
+        'loadComments' => 'Charger les commentaires',
+        'hideStats' => 'Masquer les nombres et statistiques',
+
+        'auto' => 'Auto',
+        'lightMode' => 'Mode clair',
+        'darkMode' => 'Mode sombre',
+
+        'grid' => 'Grille',
+        'masonry' => 'Dallage',
+        'feed' => 'Fil',
+    ],
+
 ];
 ];

+ 75 - 232
resources/lang/pt/web.php

@@ -6,66 +6,61 @@ return [
 		'comment' => 'Comentar',
 		'comment' => 'Comentar',
 		'commented' => 'Comentado',
 		'commented' => 'Comentado',
 		'comments' => 'Comentários',
 		'comments' => 'Comentários',
-		'like' => 'Curtir',
-		'liked' => 'Curtiu',
-		'likes' => 'Curtidas',
-		'share' => 'Compartilhar',
+		'like' => 'Gosto',
+		'liked' => 'Gostei',
+		'likes' => 'Gostos',
+		'share' => 'Partilhar',
 		'shared' => 'Compartilhado',
 		'shared' => 'Compartilhado',
 		'shares' => 'Compartilhamentos',
 		'shares' => 'Compartilhamentos',
-		'unshare' => 'Remover compartilhamento',
+		'unshare' => 'Despartilhar',
 		'bookmark' => 'Favorito',
 		'bookmark' => 'Favorito',
 
 
 		'cancel' => 'Cancelar',
 		'cancel' => 'Cancelar',
 		'copyLink' => 'Copiar link',
 		'copyLink' => 'Copiar link',
-		'delete' => 'Excluir',
+		'delete' => 'Eliminar',
 		'error' => 'Erro',
 		'error' => 'Erro',
-		'errorMsg' => 'Algo correu mal. Por favor, tente novamente mais tarde.',
-		'oops' => 'Opa!',
+		'errorMsg' => 'Ocorreu um erro. Por favor tente novamente mais tarde.',
+		'oops' => 'Oops!',
 		'other' => 'Outro',
 		'other' => 'Outro',
 		'readMore' => 'Ler mais',
 		'readMore' => 'Ler mais',
 		'success' => 'Sucesso',
 		'success' => 'Sucesso',
 		'proceed' => 'Continuar',
 		'proceed' => 'Continuar',
 		'next' => 'Seguinte',
 		'next' => 'Seguinte',
 		'close' => 'Fechar',
 		'close' => 'Fechar',
-		'clickHere' => 'clique aqui',
+		'clickHere' => 'clica aqui',
 
 
 		'sensitive' => 'Sensível',
 		'sensitive' => 'Sensível',
 		'sensitiveContent' => 'Conteúdo sensível',
 		'sensitiveContent' => 'Conteúdo sensível',
-		'sensitiveContentWarning' => 'Este post pode conter conteúdo sensível',
-    'loading' => 'Carregando...',
-    'continue' => 'Continuar',
+		'sensitiveContentWarning' => 'Esta publicação pode conter conteúdo sensível',
 	],
 	],
 
 
 	'site' => [
 	'site' => [
-		'terms' => 'Termos de Uso',
+		'terms' => 'Termos de Utilização',
 		'privacy' => 'Política de Privacidade',
 		'privacy' => 'Política de Privacidade',
 	],
 	],
 
 
 	'navmenu' => [
 	'navmenu' => [
-		'search' => 'Pesquisa',
-		'admin' => 'Painel Administrativo',
+		'search' => 'Pesquisar',
+		'admin' => 'Painel de administração',
 
 
 		// Timelines
 		// Timelines
-		'homeFeed' => 'Inicio',
+		'homeFeed' => 'Início',
 		'localFeed' => 'Feed local',
 		'localFeed' => 'Feed local',
 		'globalFeed' => 'Feed global',
 		'globalFeed' => 'Feed global',
 
 
 		// Core features
 		// Core features
 		'discover' => 'Explorar',
 		'discover' => 'Explorar',
-		'directMessages' => 'Mensagens Diretas',
+		'directMessages' => 'DM',
 		'notifications' => 'Notificações',
 		'notifications' => 'Notificações',
 		'groups' => 'Grupos',
 		'groups' => 'Grupos',
 		'stories' => 'Stories',
 		'stories' => 'Stories',
 
 
 		// Self links
 		// Self links
 		'profile' => 'Perfil',
 		'profile' => 'Perfil',
-		'drive' => 'Drive',
+		'drive' => 'Disco',
 		'settings' => 'Definições',
 		'settings' => 'Definições',
-    'appearance' => 'Aparência',
 		'compose' => 'Criar novo',
 		'compose' => 'Criar novo',
-		'logout' => 'Terminar Sessão',
-     "createStory" => "Criar Story",
-
+		'logout' => 'Terminar sessão',
 
 
 		// Nav footer
 		// Nav footer
 		'about' => 'Sobre',
 		'about' => 'Sobre',
@@ -75,53 +70,39 @@ return [
 		'terms' => 'Termos',
 		'terms' => 'Termos',
 
 
 		// Temporary links
 		// Temporary links
-		'backToPreviousDesign' => 'Voltar ao design anterior'
+		'backToPreviousDesign' => 'Voltar ao design antigo'
 	],
 	],
 
 
 	'directMessages' => [
 	'directMessages' => [
-		'inbox' => 'Caixa de Entrada',
+		'inbox' => 'Caixa de entrada',
 		'sent' => 'Enviadas',
 		'sent' => 'Enviadas',
 		'requests' => 'Pedidos'
 		'requests' => 'Pedidos'
 	],
 	],
 
 
-  'notifications' => [
-        'title' => 'Notificações',
-        'liked' => 'curtiu sua',
-        'commented' => 'comentou na sua',
-        'reacted' => 'reagiu à sua',
-        'shared' => 'compartilhou a sua',
-        'tagged' => 'marcou você numa publicação',
-        'updatedA' => 'atualizou',
-        'sentA' => 'enviou um',
-        'followed' => 'seguiu',
-        'mentioned' => 'mencionou',
-        'you' => 'você',
-        'yourApplication' => 'A sua candidatura para se juntar',
-        'applicationApproved' => 'foi aprovada!',
-        'applicationRejected' => 'foi rejeitada. Você pode inscrever-se novamente em 6 meses.',
-        'dm' => 'mensagem direta',
-        'groupPost' => 'publicação de grupo',
-        'modlog' => 'histórico de moderação',
-        'post' => 'publicação',
-        'story' => 'estória',
-        'noneFound' => 'Nenhuma notificação encontrada',
-        'youRecent' => 'Você recente',
-        'hasUnlisted' => 'foi removida da lista',
-        'cannotDisplay' => 'Não podemos exibir esta notificação no momento.',
-        'followRequest' => 'Pedidos de Seguimento',
-        'filteringResults' => 'Os resultados do filtro podem não incluir notificações mais antigas',
-        'mentions' => 'Menções',
-        'mentionsDescription' => 'Respostas às suas publicações e publicações em que você foi mencionado',
-        'likes' => 'Curtidas',
-        'likesDescription' => 'Contas que curtiram das suas publicações',
-        'followers' => 'Seguidores',
-        'followersDescription' => 'Contas que seguiram você',
-        'reblogs' => 'Reblogs',
-        'reblogsDescription' => 'Contas que compartilharam ou reblogaram suas publicações',
-        'dms' => 'DMs',
-        'dmsDescription' => 'Mensagens diretas que você tem com outras contas',
-        'accept' => 'Aceitar',
-        'reject' => 'Rejeitar'
+	'notifications' => [
+		'liked' => 'gostou do seu',
+		'commented' => 'comentou no seu',
+		'reacted' => 'reagiu ao seu',
+		'shared' => 'partilhou o teu',
+		'tagged' => 'etiquetou-te numa publicação',
+
+		'updatedA' => 'atualizou uma',
+		'sentA' => 'enviou uma',
+
+		'followed' => 'seguiu-te',
+		'mentioned' => 'mencionou-te',
+		'you' => 'tu',
+
+		'yourApplication' => 'O teu pedido de adesão',
+		'applicationApproved' => 'foi aprovado!',
+		'applicationRejected' => 'foi rejeitado. Podes voltar a candidatar-te dentro de 6 meses.',
+
+		'dm' => 'md',
+		'groupPost' => 'publicação de grupo',
+		'modlog' => 'histórico de moderação',
+		'post' => 'publicação',
+		'story' => 'estória',
+		'noneFound' => 'Nenhuma notificação encontrada',
 	],
 	],
 
 
 	'post' => [
 	'post' => [
@@ -134,35 +115,17 @@ return [
 	'profile' => [
 	'profile' => [
 		'posts' => 'Publicações',
 		'posts' => 'Publicações',
 		'followers' => 'Seguidores',
 		'followers' => 'Seguidores',
-		'following' => 'A seguir',
+		'following' => 'Seguindo',
 		'admin' => 'Administrador',
 		'admin' => 'Administrador',
 		'collections' => 'Coleções',
 		'collections' => 'Coleções',
 		'follow' => 'Seguir',
 		'follow' => 'Seguir',
 		'unfollow' => 'Deixar de seguir',
 		'unfollow' => 'Deixar de seguir',
-		'editProfile' => 'Editar Perfil',
+		'editProfile' => 'Editar perfil',
 		'followRequested' => 'Pedido para seguir enviado',
 		'followRequested' => 'Pedido para seguir enviado',
 		'joined' => 'Juntou-se',
 		'joined' => 'Juntou-se',
 
 
 		'emptyCollections' => 'Não conseguimos encontrar nenhuma coleção',
 		'emptyCollections' => 'Não conseguimos encontrar nenhuma coleção',
 		'emptyPosts' => 'Não conseguimos encontrar nenhuma publicação',
 		'emptyPosts' => 'Não conseguimos encontrar nenhuma publicação',
-
-        'blocking' => 'Você está bloqueando esta conta',
-        'sponsor' => 'Doar',
-        'followYou' => 'Segue você',
-        'archives' => 'Arquivados',
-        'bookmarks' => 'Favoritos',
-        'likes' => 'Curtidas',
-        'muted' => 'Silenciado',
-        'blocked' => 'Bloqueado',
-        'myPortifolio' => 'Meu Portfólio',
-        'private' => 'Este perfil é privado',
-        'public' => 'Público',
-        'draft' => 'Rascunho',
-        'emptyLikes' => 'Não conseguimos encontrar nenhuma publicação que você tenha curtido',
-        'emptyBookmarks' => 'Não conseguimos encontrar nenhuma publicação nos seus favoritos',
-        'emptyArchives' => 'Não conseguimos encontrar nenhuma publicação arquivada',
-        'untitled' => 'Sem título',
-        'noDescription' => 'Nenhuma descrição disponível'
 	],
 	],
 
 
 	'menu' => [
 	'menu' => [
@@ -174,192 +137,72 @@ return [
 		'unarchive' => 'Retirar do arquivo',
 		'unarchive' => 'Retirar do arquivo',
 		'embed' => 'Incorporar',
 		'embed' => 'Incorporar',
 
 
-		'selectOneOption' => 'Selecione uma das seguintes opções',
-		'unlistFromTimelines' => 'Remover das Timelines',
+		'selectOneOption' => 'Seleciona uma das seguintes opções',
+		'unlistFromTimelines' => 'Remover das cronologias',
 		'addCW' => 'Adicionar aviso de conteúdo',
 		'addCW' => 'Adicionar aviso de conteúdo',
 		'removeCW' => 'Remover aviso de conteúdo',
 		'removeCW' => 'Remover aviso de conteúdo',
-		'markAsSpammer' => 'Marcar como Spammer',
-		'markAsSpammerText' => 'Remover das timelines e adicionar um aviso de conteúdo às publicações existentes e futuras',
-		'spam' => 'Lixo Eletrônico',
-		'sensitive' => 'Conteúdo Sensível',
+		'markAsSpammer' => 'Marcar como spammer',
+		'markAsSpammerText' => 'Remover das cronologias e adicionar um aviso de conteúdo às publicações existentes e futuras',
+		'spam' => 'Spam',
+		'sensitive' => 'Conteúdo sensível',
 		'abusive' => 'Abusivo ou prejudicial',
 		'abusive' => 'Abusivo ou prejudicial',
 		'underageAccount' => 'Conta de menor de idade',
 		'underageAccount' => 'Conta de menor de idade',
 		'copyrightInfringement' => 'Violação de direitos de autor',
 		'copyrightInfringement' => 'Violação de direitos de autor',
 		'impersonation' => 'Roubo de identidade',
 		'impersonation' => 'Roubo de identidade',
 		'scamOrFraud' => 'Esquema ou fraude',
 		'scamOrFraud' => 'Esquema ou fraude',
 		'confirmReport' => 'Confirmar denúncia',
 		'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!',
 		'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.',
 		'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?',
 		'modUnlistConfirm' => 'Tem a certeza que pretende deslistar este post?',
 		'modUnlistSuccess' => 'Deslistou com sucesso 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',
 		'modMarkAsSpammerSuccess' => 'Marcou com sucesso esta conta como spammer',
 
 
-		'toFollowers' => 'para seguidores',
+		'toFollowers' => 'para Seguidores',
 
 
-		'showCaption' => 'Exibir legendas',
-		'showLikes' => 'Mostrar Gostos',
+		'showCaption' => 'Mostar legenda',
+		'showLikes' => 'Mostrar gostos',
 		'compactMode' => 'Modo compacto',
 		'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?',
 		'unarchivePostConfirm' => 'Tem a certeza que pretende desarquivar este post?',
-        'pin' => "Fixar",
-        'unpin' => "Desfixar",
-        "pinPostConfirm" => "Tem certeza de que deseja fixar esta publicação?",
-        "unpinPostConfirm" => "Tem certeza de que deseja desafixar esta publicação?"
 	],
 	],
 
 
-  'story' => [
-        'add' => 'Adicionar Story',
-        'myStory' => 'Minha Story',
-        'viewMyStory' => 'Ver Minha Story',
-        'goBack' => 'Voltar',
-        'delete' => 'Excluir',
-        'crop' => 'Cortar',
-        'error' => 'Ocorreu um erro, por favor tente novamente mais tarde.',
-        'cropping' => 'Cortando',
-        'storyDuration' => 'Duração da Story',
-        'seconds' => 'segundos',
-        'processing' => 'Processando',
-        'shareWithFollowers' => 'Compartilhe momentos com seguidores que duram 24 horas',
-        'cancel' => 'Cancelar',
-        'viewdBy' => 'Visualizado por',
-        'next' => 'Próximo',
-        'zoom' => 'Mova e pinça para dar zoom',
-        'options' => 'Opções',
-        'allowReplies' => 'Permitir Respostas',
-        'allowReactions' => 'Permitir Reações',
-        'limit' => 'Você atingiu o limite para novas stories',
-        'reactionSent' => 'Reação enviada',
-        'replySent' => 'Resposta enviada',
-        'expiresIn' => 'Expira em',
-        'viewers' => 'Visualizadores',
-        'report' => 'Denunciar',
-        'close' => 'Fechar',
-        'myStories' => 'My Stories',
-        'seeAll' => 'Ver todas as stories',
-
+	'story' => [
+		'add' => 'Adicionar Storie'
 	],
 	],
 
 
 	'timeline' => [
 	'timeline' => [
-		'peopleYouMayKnow' => 'Pessoas que talvez conheça',
+		'peopleYouMayKnow' => 'Pessoas que talvez conheças',
 
 
 		'onboarding' => [
 		'onboarding' => [
 			'welcome' => 'Bem-vindo',
 			'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' => [
 	'hashtags' => [
-		'emptyFeed' => 'Não encontramos nenhuma publicação com esta hashtag'
+		'emptyFeed' => 'Não conseguimos encontrar publicações com essa hashtag'
 	],
 	],
 
 
 	'report' => [
 	'report' => [
 		'report' => 'Denunciar',
 		'report' => 'Denunciar',
-		'selectReason' => 'Selecione uma razão',
+		'selectReason' => 'Seleciona um motivo',
 		'reported' => 'Denunciado',
 		'reported' => 'Denunciado',
 		'sendingReport' => 'A enviar denúncia',
 		'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',
 	],
 	],
-    'appearance' => [
-        'theme' => 'Tema',
-        'profileLayout' => 'Layout do Perfil',
-        'compactPreviews' => 'Pré-visualizações Compactas',
-        'loadComments' => 'Carregar Comentários',
-        'hideStats' => 'Ocultar Contagens e Estatísticas',
-        'auto' => 'Automático',
-        'lightMode' => 'Modo Claro',
-        'darkMode' => 'Modo Escuro',
-        'grid' => 'Grade',
-        'masonry' => 'Mansory',
-        'feed' => 'Feed'
-    ],
-
-    'settings' => [
-        'filters' => [
-            'title' => 'Filtros',
-            'manage_your_custom_filters' => 'Gerencie seus filtros personalizados.',
-            'customize_your_experience' => 'Personalize sua experiência com filtros de conteúdo poderosos que verificam palavras ou frases específicas em toda a sua conta - incluindo linhas do tempo pessoais e públicas, e feeds de hashtags.',
-            'add_new_filter' => 'Adicionar Novo Filtro',
-            'limit_message' => 'Você pode adicionar até <strong>:filters_num filtros</strong> que podem ter até <strong>:keywords_num palavras-chave</strong>.',
-            'learn_more_help_center' => 'Saiba mais no nosso <a href="/site/help">Centro de Ajuda</a>.',
-            'no_filters' => 'Você ainda não tem nenhum filtro de conteúdo',
-            'no_filters_message' => 'Os filtros ajudam você a ocultar conteúdo que contém palavras ou frases específicas das suas linhas do tempo.',
-            'create_first_filter' => 'Crie Seu Primeiro Filtro',
-            'no_matching_filters' => 'Você não tem nenhum filtro de conteúdo que corresponda a <strong>:searchQuery</strong>.',
-            'no_matching_filters_message' => 'Os filtros ajudam você a ocultar conteúdo que contém palavras ou frases específicas das suas linhas do tempo.',
-            'create_new_filter' => 'Criar Novo Filtro',
-            'filter_title' => 'Título do Filtro',
-            'edit_filter' => 'Editar Filtro',
-            'create_filter' => 'Criar Filtro',
-            'advance_mode' => 'Modo Avançado',
-            'simple_mode' => 'Modo Simples',
-            'keywords' => 'Palavras-chave',
-            'legend' => 'Legenda',
-            'whole_word' => 'Palavra inteira',
-            'partial_word' => 'Palavra parcial',
-            'duplicate_not_allowed' => 'Palavras-chave duplicadas não são permitidas',
-            'filter_action' => 'Ação do Filtro',
-            'hide_media_blur' => 'Ocultar mídia atrás de um desfoque',
-            'show_warning' => 'Mostrar aviso antes de exibir o conteúdo',
-            'hide_content_completely' => 'Ocultar conteúdo completamente',
-            'apply_filters_to' => 'Aplicar filtros a',
-            'home_timeline' => 'Linha do Tempo Pessoal',
-            'notifications' => 'Notificações',
-            'public_timeline' => 'Linha do Tempo Pública',
-            'hashtags' => 'Hashtags',
-            'groups' => 'Grupos',
-            'conversations' => 'Conversas',
-            'duration' => 'Duração',
-            'forever' => 'Para Sempre',
-            '30_minutes' => '30 minutos',
-            '1_hour' => '1 hora',
-            '6_hours' => '6 horas',
-            '12_hours' => '12 horas',
-            '1_day' => '1 dia',
-            '1_week' => '1 semana',
-            'cutom' => 'Personalizado...',
-            'enter_duration_in_seconds' => 'Insira a duração em segundos',
-            'save_changes' => 'Salvar Alterações',
-            'create_filter' => 'Criar Filtro',
-            'name_your_filter' => 'Nomeie seu filtro',
-            'give_your_filter_a_name' => 'Dê ao seu filtro um nome que o ajude a lembrar o que ele filtra.',
-            'my_filter_name' => 'Nome do Meu Filtro',
-            'filter_duration' => 'Duração do Filtro',
-            'add_filter_keywords' => 'Adicionar palavras-chave ao filtro',
-            'add_word_or_phrase' => 'Adicione palavras ou frases que você deseja filtrar.<br />Conteúdo contendo essas palavras será filtrado de acordo com suas configurações.',
-            'whole_word_match' => 'Correspondência de palavra inteira - filtra apenas correspondências exatas (ex.: "livro" não corresponderá a "livraria")',
-            'partial_word_match' => 'Correspondência de palavra parcial - filtra qualquer conteúdo que contenha este texto (ex.: "livro" corresponderá a "livraria")',
-            'add_another_keyword' => 'Adicionar outra palavra-chave',
-            'please_remove_duplicate_keywords' => 'Por favor, remova palavras-chave duplicadas antes de continuar',
-            'choose_filter_action' => 'Escolha a ação do filtro',
-            'choose_filter_action_description' => 'Como você gostaria de lidar com o conteúdo que corresponde ao seu filtro?',
-            'hide_completely' => 'Ocultar completamente o conteúdo que corresponde',
-            'choose_where_to_apply' => 'Escolha Onde Aplicar',
-            'choose_where_to_apply_description' => 'Selecione quais seções do aplicativo devem usar este filtro.',
-            'review_your_filter' => 'Revise seu filtro',
-            'review_your_filter_description' => 'Aqui está um resumo do filtro que você criou.',
-            'no_keywords_specified' => 'Nenhuma palavra-chave especificada',
-            'action' => 'Ação',
-            'expires' => 'Expira',
-            'never_expires' => 'Nunca Expira',
-            'titleAdvance' => 'Título',
-            'context' => 'Contexto',
-            'review' => 'Revisão',
-            'add_keyword' => 'Adicionar uma palavra-chave...',
-            'enter_filter_title' => 'Insira o título do filtro',
-        ],
-    ]
+
 ];
 ];

+ 5 - 0
tests/Pest.php

@@ -0,0 +1,5 @@
+<?php
+
+expect()->extend('toBeOne', function () {
+    return $this->toBe(1);
+});

+ 5 - 0
tests/Unit/ExampleTest.php

@@ -0,0 +1,5 @@
+<?php
+
+test('that true is true', function () {
+    expect(true)->toBeTrue();
+});

Some files were not shown because too many files changed in this diff