App: Sprachen von 9 auf 27 erweitert + RTL-Darstellung repariert

Neue Zielsprachen fuer die groessten Sprachgemeinschaften in Deutschland,
u. a. Kurdisch (Kurmanci), Bulgarisch, Kroatisch/Serbisch/Bosnisch,
Albanisch, Italienisch, Griechisch, Spanisch, Vietnamesisch, Hindi, Urdu,
Paschtu, Tigrinya, Somali, Chinesisch. Liste nach Groesse der Gemeinschaft
in Deutschland sortiert.

Ausserdem: Sprache bekommt ein rtl-Flag. Arabisch und Farsi wurden bisher
linksbuendig dargestellt, was bei diesen Schriften falsch ist — jetzt
laufen Kernaussage, Erklaerung, To-dos und Fachbegriff-Erklaerungen bei
ar/fa/ur/ps von rechts nach links (der deutsche Fachbegriff bleibt links).

Neuer Test sprachen.test.ts schuetzt vor doppelten Codes (die wuerden den
Uebersetzungs-Cache ueberschreiben). 35 Tests gruen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
JUSNandClaude Opus 5 committed 2026-09-15 15:13:59 +02:00
1 parent 8dc9074691
commit 464e9b109f
3 files changed
+77 -10

No files matched your search

+10 -5
View File
@@ -72,6 +72,11 @@ export function AnalyseScreen({ navigation, route }: Props) {
const checkliste = cache?.checkliste ?? analyse.checkliste;
const fachbegriffe = cache?.fachbegriffe ?? analyse.fachbegriffe;
// Arabisch, Farsi, Urdu, Paschtu laufen von rechts nach links. Ohne das
// steht der übersetzte Text linksbündig und liest sich falsch.
const rtl = !!sprache.rtl;
const rtlText = rtl ? ({ writingDirection: 'rtl', textAlign: 'right' } as const) : null;
const sprscheWaehlen = async (neu: Sprache) => {
setSprachwahlOffen(false);
setSprache(neu);
@@ -221,8 +226,8 @@ export function AnalyseScreen({ navigation, route }: Props) {
{/* ── Das ist passiert ── */}
<Text style={styles.kicker}>Das ist passiert</Text>
<Text style={styles.kernaussage}>{kernaussage}</Text>
<Text style={styles.erklaerung}>{erklaerung}</Text>
<Text style={[styles.kernaussage, rtlText]}>{kernaussage}</Text>
<Text style={[styles.erklaerung, rtlText]}>{erklaerung}</Text>
{/* ── Das müssen Sie tun ── */}
{checkliste.length > 0 && (
@@ -235,7 +240,7 @@ export function AnalyseScreen({ navigation, route }: Props) {
return (
<Pressable
key={i}
style={styles.todoZeile}
style={[styles.todoZeile, rtl && { flexDirection: 'row-reverse' as const }]}
onPress={() => setErledigt((e) => ({ ...e, [i]: !e[i] }))}
accessibilityRole="checkbox"
accessibilityState={{ checked: fertig }}
@@ -247,7 +252,7 @@ export function AnalyseScreen({ navigation, route }: Props) {
<Text style={styles.todoNummer}>{i + 1}</Text>
)}
</View>
<Text style={[styles.todoText, fertig && styles.durchgestrichen]}>{punkt}</Text>
<Text style={[styles.todoText, fertig && styles.durchgestrichen, rtlText]}>{punkt}</Text>
</Pressable>
);
})}
@@ -264,7 +269,7 @@ export function AnalyseScreen({ navigation, route }: Props) {
{fachbegriffe.map((f, i) => (
<View key={i} style={styles.begriffKarte}>
<Text style={styles.begriff}>{f.begriff}</Text>
<Text style={styles.begriffText}>{f.erklaerung}</Text>
<Text style={[styles.begriffText, rtlText]}>{f.erklaerung}</Text>
</View>
))}
</View>