2d35c1d9de
- New client-side i18n via React Context (useI18n, tArray, I18nProvider) - Catalog ships 21 locale stubs; only zh-CN/en/ja have reviewed translations - Header language switcher (globe icon + short label) before settings gear - All hardcoded Chinese UI text migrated to keys: typewriter, options, hints (with embedded gear icon via dangerouslySetInnerHTML), settings panel, footer/about, play page hints - AI output language follows user-selected locale via trailing one-liner directive appended to Architect/Writer/CharacterDesigner/InsertBeat user messages (preserves system-prompt cacheability) - Per-locale separator rule: zh uses middot between every glyph; en/ja use plain spaces - Option value → i18n key suffix maps preserve Chinese as the underlying identifier so analytics unions and STYLE_MAP keys stay byte-stable Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
90 lines
2.1 KiB
TypeScript
90 lines
2.1 KiB
TypeScript
// French
|
|
// Auto-generated by scripts/translate-i18n.mjs
|
|
|
|
export const fr = {
|
|
"layout": {
|
|
"metadata": {
|
|
"title": "InfiPlot",
|
|
"description": "InfiPlot"
|
|
}
|
|
},
|
|
"home": {
|
|
"examples": {
|
|
"male": [],
|
|
"female": [],
|
|
"x": []
|
|
},
|
|
"options": {
|
|
"gender": "",
|
|
"artStyle": "",
|
|
"plotStyle": "",
|
|
"voice": "",
|
|
"pacing": ""
|
|
},
|
|
"genders": {
|
|
"male": "",
|
|
"female": "",
|
|
"x": ""
|
|
},
|
|
"artStyles": {},
|
|
"plotStyles": {
|
|
"straightforward": "",
|
|
"twist": ""
|
|
},
|
|
"voiceOptions": {
|
|
"off": "",
|
|
"on": ""
|
|
},
|
|
"pacings": {
|
|
"fast": "",
|
|
"relaxed": ""
|
|
},
|
|
"stories": {},
|
|
"ui": {
|
|
"start": "",
|
|
"loadStory": "",
|
|
"settings": "",
|
|
"searchPlaceholder": "",
|
|
"noMatchingStyle": "",
|
|
"close": "",
|
|
"back": "",
|
|
"save": "",
|
|
"cancel": "",
|
|
"saveAndSelect": ""
|
|
},
|
|
"styleModal": {},
|
|
"hero": {
|
|
"title": "",
|
|
"placeholder": " ",
|
|
"enterHint": ""
|
|
},
|
|
"hint": {
|
|
"text": (params: { authEnabled?: boolean }) => {
|
|
const authHint = params.authEnabled ? ' (connexion requise pendant la bêta, jeu gratuit)' : '';
|
|
return `Entrez vos idées, configurez les styles et cliquez sur "Démarrer" pour jouer${authHint}. Vous pouvez également choisir une histoire sélectionnée ci-dessous pour découvrir rapidement <em>InfiPlot</em>. Cliquez sur "Paramètres" pour entrer votre nom et configurer vos propres clés de texte, d'image, de vision et de TTS—tout est stocké localement dans votre navigateur pour une expérience plus stable.`;
|
|
},
|
|
"closeAriaLabel": "Ne plus afficher cette astuce"
|
|
},
|
|
"about": {},
|
|
"errors": {
|
|
"emptyFile": "",
|
|
"fileTooLarge": "",
|
|
"unpackFailed": "",
|
|
"parseFailed": "",
|
|
"cardNotFound": ""
|
|
}
|
|
},
|
|
"play": {},
|
|
"settings": {},
|
|
"auth": {},
|
|
"history": {},
|
|
"customForm": {},
|
|
"language": {
|
|
"title": "",
|
|
"current": "",
|
|
"select": ""
|
|
}
|
|
} as const;
|
|
|
|
export type FrTranslations = typeof fr;
|