BloomFeed ADD EN TRANSLATION v0.23

This commit is contained in:
Esteban
2026-07-04 23:46:45 +02:00
parent eaebadcfa6
commit 558a434630
11 changed files with 49 additions and 7 deletions
+2
View File
@@ -38,6 +38,8 @@ return [
'badge_open_source' => 'Open Source', 'badge_open_source' => 'Open Source',
'badge_mit_license' => 'MIT-Lizenz', 'badge_mit_license' => 'MIT-Lizenz',
'badge_four_languages' => '4 Sprachen', 'badge_four_languages' => '4 Sprachen',
'feature_multiuser_title' => 'Gemacht für dein Zuhause',
'feature_multiuser_text' => 'Lade vertraute Personen mit einem direkten Konto ein, oder öffne die Registrierung für eine Weile — jeder behält seine eigenen Feeds, Lektüre und Benachrichtigungen.',
// Authentifizierung // Authentifizierung
'login_title' => 'Anmelden', 'login_title' => 'Anmelden',
+2
View File
@@ -38,6 +38,8 @@ return [
'badge_open_source' => 'Open-source', 'badge_open_source' => 'Open-source',
'badge_mit_license' => 'MIT license', 'badge_mit_license' => 'MIT license',
'badge_four_languages' => '4 languages', 'badge_four_languages' => '4 languages',
'feature_multiuser_title' => 'Built for your household',
'feature_multiuser_text' => 'Invite the people you trust with a direct account, or open registrations for a while — everyone keeps their own feeds, reads and notifiers.',
// Authentication // Authentication
'login_title' => 'Log in', 'login_title' => 'Log in',
+2
View File
@@ -38,6 +38,8 @@ return [
'badge_open_source' => 'Código abierto', 'badge_open_source' => 'Código abierto',
'badge_mit_license' => 'Licencia MIT', 'badge_mit_license' => 'Licencia MIT',
'badge_four_languages' => '4 idiomas', 'badge_four_languages' => '4 idiomas',
'feature_multiuser_title' => 'Pensado para tu hogar',
'feature_multiuser_text' => 'Invita a las personas de confianza con una cuenta directa, o abre los registros por un tiempo — cada uno mantiene sus propias fuentes, lecturas y notificadores.',
// Autenticación // Autenticación
'login_title' => 'Iniciar sesión', 'login_title' => 'Iniciar sesión',
+2
View File
@@ -38,6 +38,8 @@ return [
'badge_open_source' => 'Open-source', 'badge_open_source' => 'Open-source',
'badge_mit_license' => 'Licence MIT', 'badge_mit_license' => 'Licence MIT',
'badge_four_languages' => '4 langues', 'badge_four_languages' => '4 langues',
'feature_multiuser_title' => 'Pensé pour votre foyer',
'feature_multiuser_text' => "Invitez les personnes de confiance avec un compte direct, ou ouvrez les inscriptions un moment — chacun garde ses propres flux, lectures et notifieurs.",
// Authentification // Authentification
'login_title' => 'Connexion', 'login_title' => 'Connexion',
+16 -2
View File
@@ -503,10 +503,22 @@ h1, h2, h3 {
margin: 0 auto; margin: 0 auto;
padding: 0 var(--space-5) var(--space-8); padding: 0 var(--space-5) var(--space-8);
display: grid; display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); grid-template-columns: repeat(3, 1fr);
gap: var(--space-5); gap: var(--space-5);
} }
@media (max-width: 860px) {
.feature-grid {
grid-template-columns: repeat(2, 1fr);
}
}
@media (max-width: 560px) {
.feature-grid {
grid-template-columns: 1fr;
}
}
.feature-card { .feature-card {
background: var(--surface); background: var(--surface);
border: 1px solid var(--border); border: 1px solid var(--border);
@@ -548,7 +560,7 @@ h1, h2, h3 {
border-radius: var(--radius); border-radius: var(--radius);
font-size: 2.1rem; font-size: 2.1rem;
margin-bottom: var(--space-4); margin-bottom: var(--space-4);
color: var(--accent-contrast); color: #fff;
background: var(--gradient-accent); background: var(--gradient-accent);
box-shadow: var(--shadow-accent); box-shadow: var(--shadow-accent);
transition: transform var(--t-base); transition: transform var(--t-base);
@@ -557,6 +569,8 @@ h1, h2, h3 {
.feature-icon-2 { background: linear-gradient(135deg, var(--green) 0%, #7fd19e 100%); } .feature-icon-2 { background: linear-gradient(135deg, var(--green) 0%, #7fd19e 100%); }
.feature-icon-3 { background: linear-gradient(135deg, #6ba7e8 0%, #a3c9f7 100%); } .feature-icon-3 { background: linear-gradient(135deg, #6ba7e8 0%, #a3c9f7 100%); }
.feature-icon-4 { background: linear-gradient(135deg, #e88a6b 0%, var(--sun-bright) 100%); } .feature-icon-4 { background: linear-gradient(135deg, #e88a6b 0%, var(--sun-bright) 100%); }
.feature-icon-5 { background: linear-gradient(135deg, #8b6bd1 0%, #b79bea 100%); }
.feature-icon-6 { background: linear-gradient(135deg, #d1568b 0%, #ea9bc1 100%); }
.feature-card:hover .feature-icon { .feature-card:hover .feature-icon {
transform: scale(1.12) rotate(-4deg); transform: scale(1.12) rotate(-4deg);

Before

Width:  |  Height:  |  Size: 148 KiB

After

Width:  |  Height:  |  Size: 148 KiB

Before

Width:  |  Height:  |  Size: 433 KiB

After

Width:  |  Height:  |  Size: 433 KiB

Before

Width:  |  Height:  |  Size: 422 KiB

After

Width:  |  Height:  |  Size: 422 KiB

Before

Width:  |  Height:  |  Size: 196 KiB

After

Width:  |  Height:  |  Size: 196 KiB

Before

Width:  |  Height:  |  Size: 322 KiB

After

Width:  |  Height:  |  Size: 322 KiB

+25 -5
View File
@@ -1,5 +1,15 @@
@extends('layouts.marketing', ['title' => 'BloomFeed']) @extends('layouts.marketing', ['title' => 'BloomFeed'])
@php
// Screenshots live under images/screenshots/{locale}/ so each language can show its own
// captures; falls back to the French set until the other locales are captured too.
$screenshotUrl = function (string $file) {
$localized = 'images/screenshots/' . app()->getLocale() . '/' . $file;
$path = file_exists(public_path($localized)) ? $localized : 'images/screenshots/fr/' . $file;
return asset($path);
};
@endphp
@section('content') @section('content')
<section class="hero"> <section class="hero">
<div class="hero-orbs" aria-hidden="true"> <div class="hero-orbs" aria-hidden="true">
@@ -42,8 +52,8 @@
<span class="browser-dot browser-dot-yellow"></span> <span class="browser-dot browser-dot-yellow"></span>
<span class="browser-dot browser-dot-green"></span> <span class="browser-dot browser-dot-green"></span>
</div> </div>
<img src="{{ asset('images/screenshots/dashboard-light.png') }}" alt="BloomFeed dashboard" class="browser-frame-img browser-frame-img-light"> <img src="{{ $screenshotUrl('dashboard-light.png') }}" alt="BloomFeed dashboard" class="browser-frame-img browser-frame-img-light">
<img src="{{ asset('images/screenshots/dashboard-dark.png') }}" alt="BloomFeed dashboard" class="browser-frame-img browser-frame-img-dark"> <img src="{{ $screenshotUrl('dashboard-dark.png') }}" alt="BloomFeed dashboard" class="browser-frame-img browser-frame-img-dark">
</div> </div>
</div> </div>
</div> </div>
@@ -70,6 +80,16 @@
<h3>{{ __('app.notifiers') }}</h3> <h3>{{ __('app.notifiers') }}</h3>
<p>{{ __('app.notifiers_lede') }}</p> <p>{{ __('app.notifiers_lede') }}</p>
</div> </div>
<div class="feature-card reveal">
<div class="feature-icon feature-icon-5"><i class="fa-solid fa-compass"></i></div>
<h3>{{ __('app.catalog_title') }}</h3>
<p>{{ __('app.catalog_lede') }}</p>
</div>
<div class="feature-card reveal">
<div class="feature-icon feature-icon-6"><i class="fa-solid fa-users"></i></div>
<h3>{{ __('app.feature_multiuser_title') }}</h3>
<p>{{ __('app.feature_multiuser_text') }}</p>
</div>
</section> </section>
<section class="screenshots-section"> <section class="screenshots-section">
@@ -95,12 +115,12 @@
<span class="browser-dot browser-dot-yellow"></span> <span class="browser-dot browser-dot-yellow"></span>
<span class="browser-dot browser-dot-green"></span> <span class="browser-dot browser-dot-green"></span>
</div> </div>
<img id="screenshotMainImg" class="browser-frame-img" src="{{ asset('images/screenshots/' . $screenshots[0]['file']) }}" alt="{{ $screenshots[0]['caption'] }}"> <img id="screenshotMainImg" class="browser-frame-img" src="{{ $screenshotUrl($screenshots[0]['file']) }}" alt="{{ $screenshots[0]['caption'] }}">
</div> </div>
<div class="screenshot-thumbs"> <div class="screenshot-thumbs">
@foreach ($screenshots as $index => $shot) @foreach ($screenshots as $index => $shot)
<button type="button" class="screenshot-thumb {{ $index === 0 ? 'active' : '' }}" data-img="{{ asset('images/screenshots/' . $shot['file']) }}" data-caption="{{ $shot['caption'] }}"> <button type="button" class="screenshot-thumb {{ $index === 0 ? 'active' : '' }}" data-img="{{ $screenshotUrl($shot['file']) }}" data-caption="{{ $shot['caption'] }}">
<img src="{{ asset('images/screenshots/' . $shot['file']) }}" alt="{{ $shot['caption'] }}" loading="lazy"> <img src="{{ $screenshotUrl($shot['file']) }}" alt="{{ $shot['caption'] }}" loading="lazy">
</button> </button>
@endforeach @endforeach
</div> </div>