App copy
This commit is contained in:
187
constants/socialProof.ts
Normal file
187
constants/socialProof.ts
Normal file
@@ -0,0 +1,187 @@
|
||||
import { Language } from '../types';
|
||||
|
||||
/**
|
||||
* EINZIGE QUELLE FUER SOCIAL PROOF IN DER APP.
|
||||
*
|
||||
* Regel: Hier steht ausschliesslich, was im App Store / Play Store nachweisbar ist.
|
||||
* Keine erfundenen Zitate, keine geschaetzten Sterne, keine Rundungen nach oben.
|
||||
* Wenn eine Angabe nicht belegbar ist, wird sie hier entfernt - nicht im UI kaschiert.
|
||||
*
|
||||
* Stand: 27.07.2026 - 6 Bewertungen, Durchschnitt 5,0.
|
||||
* Bei jeder Aktualisierung des Store-Listings hier nachziehen.
|
||||
*/
|
||||
export const APP_STORE_RATING = {
|
||||
value: 5.0,
|
||||
count: 6,
|
||||
/** Datum der letzten Verifikation gegen App Store Connect. */
|
||||
verifiedOn: '2026-07-27',
|
||||
};
|
||||
|
||||
export type Testimonial = {
|
||||
/** Titel der Bewertung im Store. */
|
||||
title: string;
|
||||
/** Wortlaut exakt wie im Store veroeffentlicht (gekuerzt nur mit […]). */
|
||||
quote: string;
|
||||
/** Store-Anzeigename - kein erfundener Klarname. */
|
||||
author: string;
|
||||
stars: 1 | 2 | 3 | 4 | 5;
|
||||
/** Sprache, in der die Bewertung tatsaechlich verfasst wurde. */
|
||||
sourceLanguage: Language;
|
||||
/** Veroeffentlichungsdatum im Store (ISO), fuer die Nachvollziehbarkeit. */
|
||||
publishedOn: string;
|
||||
/**
|
||||
* Wie stark die Bewertung die Positionierung stuetzt (1 = staerkste).
|
||||
* Kriterium: benennt sie Triage ("sagt mir, was los ist und was ich tun soll")
|
||||
* oder nur allgemeine Zufriedenheit? Erstere ueberzeugt, letztere ist Rauschen.
|
||||
*/
|
||||
priority: number;
|
||||
/** Freigegebene Uebersetzungen. Wird im UI als Uebersetzung gekennzeichnet. */
|
||||
translations?: Partial<Record<Language, string>>;
|
||||
};
|
||||
|
||||
/**
|
||||
* ECHTE Store-Bewertungen, Stand 27.07.2026 (6 von 6, alle 5 Sterne).
|
||||
* Wortlaut, Anzeigename und Sternezahl unveraendert uebernommen.
|
||||
*/
|
||||
export const TESTIMONIALS: Testimonial[] = [
|
||||
{
|
||||
// Staerkste Bewertung im gesamten Bestand: beschreibt exakt die Positionierung
|
||||
// (Triage statt Identifikation) in den Worten eines echten Nutzers.
|
||||
title: 'Exactly what I needed',
|
||||
quote:
|
||||
"Finally an app that actually helps me keep my plants alive. Snap a photo and it tells you what's wrong and how to fix it - no more guessing why the leaves are turning yellow. Super easy to use and the care reminders are a nice touch. Highly recommend if you're bad at keeping plants alive like me!",
|
||||
author: 'Chrispetersssss',
|
||||
stars: 5,
|
||||
sourceLanguage: 'en',
|
||||
publishedOn: '2026-07-22',
|
||||
priority: 1,
|
||||
translations: {
|
||||
de: 'Endlich eine App, die mir wirklich hilft, meine Pflanzen am Leben zu halten. Foto machen und sie sagt dir, was nicht stimmt und wie du es behebst - kein Rätselraten mehr, warum die Blätter gelb werden. Sehr einfach zu bedienen, und die Pflege-Erinnerungen sind ein netter Zusatz. Klare Empfehlung, wenn du wie ich schlecht darin bist, Pflanzen am Leben zu halten!',
|
||||
es: 'Por fin una app que de verdad me ayuda a mantener vivas mis plantas. Haces una foto y te dice qué le pasa y cómo arreglarlo: se acabó adivinar por qué se ponen amarillas las hojas. Muy fácil de usar, y los recordatorios de cuidado son un buen extra. Muy recomendable si se te dan mal las plantas, como a mí.',
|
||||
},
|
||||
},
|
||||
{
|
||||
// Direkter Wettbewerbsvergleich - stuetzt Belief 5 (Abo statt Alternativen).
|
||||
title: 'Wow',
|
||||
quote:
|
||||
'Die Pflanzenanalyse toppt echt jede andere App die ich bisher ausprobiert habe! Der Hammer!',
|
||||
author: 'warumistjedernamevergeben',
|
||||
stars: 5,
|
||||
sourceLanguage: 'de',
|
||||
publishedOn: '2026-04-12',
|
||||
priority: 2,
|
||||
translations: {
|
||||
en: 'The plant analysis genuinely beats every other app I have tried so far! Amazing!',
|
||||
es: '¡El análisis de plantas supera de verdad a cualquier otra app que haya probado! ¡Increíble!',
|
||||
},
|
||||
},
|
||||
{
|
||||
// Trifft den Avatar woertlich ("keinen gruenen Daumen").
|
||||
title: 'Mega',
|
||||
quote:
|
||||
'Ich habe schon viele Apps ausprobiert, weil ich keinen grünen Daumen habe. Keine hat mich bisher so überzeugt wie diese ! Kann sie jedem ans Herz legen',
|
||||
author: 'Annastasia2104',
|
||||
stars: 5,
|
||||
sourceLanguage: 'de',
|
||||
publishedOn: '2026-07-02',
|
||||
priority: 3,
|
||||
translations: {
|
||||
en: 'I have tried a lot of apps because I do not have a green thumb. None has convinced me as much as this one! I can recommend it to anyone.',
|
||||
es: 'He probado muchas apps porque no tengo mano para las plantas. ¡Ninguna me había convencido tanto como esta! Se la recomiendo a cualquiera.',
|
||||
},
|
||||
},
|
||||
{
|
||||
title: 'Beste App',
|
||||
quote: 'Bisher mit Abstand die beste App für meine Pflanzen!',
|
||||
author: 'lina_einhorn',
|
||||
stars: 5,
|
||||
sourceLanguage: 'de',
|
||||
publishedOn: '2026-07-02',
|
||||
priority: 4,
|
||||
translations: {
|
||||
en: 'By far the best app for my plants so far!',
|
||||
es: '¡Con diferencia, la mejor app para mis plantas hasta ahora!',
|
||||
},
|
||||
},
|
||||
{
|
||||
title: 'Endlich ....',
|
||||
quote:
|
||||
'… vergesse ich nicht, meine Pflanzen zu gießen, um zu pflegen!!! Einfache Bedienung - top App',
|
||||
author: 'ClaKnu',
|
||||
stars: 5,
|
||||
sourceLanguage: 'de',
|
||||
publishedOn: '2026-07-02',
|
||||
priority: 5,
|
||||
translations: {
|
||||
en: '… I no longer forget to water and care for my plants!!! Easy to use - top app',
|
||||
es: '… ¡ya no me olvido de regar y cuidar mis plantas!!! Fácil de usar, app estupenda',
|
||||
},
|
||||
},
|
||||
{
|
||||
title: 'Tolle App',
|
||||
quote: 'Ich bin richtig zufrieden ! Tolle App',
|
||||
author: 'annabelle_gouz',
|
||||
stars: 5,
|
||||
sourceLanguage: 'de',
|
||||
publishedOn: '2026-07-04',
|
||||
priority: 6,
|
||||
translations: {
|
||||
en: 'I am really happy with it! Great app',
|
||||
es: '¡Estoy muy contenta! Gran app',
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
export type DisplayTestimonial = {
|
||||
title: string;
|
||||
quote: string;
|
||||
author: string;
|
||||
stars: 1 | 2 | 3 | 4 | 5;
|
||||
/** true, wenn der angezeigte Text eine Uebersetzung des Originals ist. */
|
||||
isTranslated: boolean;
|
||||
};
|
||||
|
||||
/**
|
||||
* Waehlt die staerkste Bewertung fuer die UI-Sprache.
|
||||
*
|
||||
* Vorrang hat eine im Original passende Sprache; gibt es keine, wird die
|
||||
* hoechstpriorisierte Bewertung mit freigegebener Uebersetzung genommen und
|
||||
* im UI als Uebersetzung gekennzeichnet. Nie wird ein fremdsprachiges
|
||||
* Original unkommentiert als muttersprachlich ausgegeben.
|
||||
*/
|
||||
export const getTestimonialForLanguage = (language: Language): DisplayTestimonial | null => {
|
||||
if (TESTIMONIALS.length === 0) return null;
|
||||
|
||||
const byPriority = [...TESTIMONIALS].sort((a, b) => a.priority - b.priority);
|
||||
|
||||
const native = byPriority.find((t) => t.sourceLanguage === language);
|
||||
if (native) {
|
||||
return {
|
||||
title: native.title,
|
||||
quote: native.quote,
|
||||
author: native.author,
|
||||
stars: native.stars,
|
||||
isTranslated: false,
|
||||
};
|
||||
}
|
||||
|
||||
const translated = byPriority.find((t) => t.translations?.[language]);
|
||||
if (translated) {
|
||||
return {
|
||||
title: translated.title,
|
||||
quote: translated.translations![language]!,
|
||||
author: translated.author,
|
||||
stars: translated.stars,
|
||||
isTranslated: true,
|
||||
};
|
||||
}
|
||||
|
||||
return null;
|
||||
};
|
||||
|
||||
/** Hinweis, der erscheint, wenn eine Bewertung nicht in der UI-Sprache verfasst wurde. */
|
||||
export const translatedNote = (language: Language): string => {
|
||||
if (language === 'de') return 'Übersetzt';
|
||||
if (language === 'es') return 'Traducido';
|
||||
return 'Translated';
|
||||
};
|
||||
Reference in New Issue
Block a user