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.2 KiB
TypeScript
90 lines
2.2 KiB
TypeScript
// Vietnamese
|
|
// Auto-generated by scripts/translate-i18n.mjs
|
|
|
|
export const vi = {
|
|
"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 ? ' (yêu cầu đăng nhập trong bản beta, chơi miễn phí)' : '';
|
|
return `Nhập ý tưởng của bạn, cấu hình kiểu và nhấp "Bắt đầu" để chơi${authHint}. Bạn cũng có thể chọn một câu chuyện được chọn từ bên dưới để trải nghiệm nhanh <em>InfiPlot</em>. Nhấp "Cài đặt" để nhập tên của bạn và cấu hình khóa văn bản, hình ảnh, hình ảnh và TTS của riêng bạn—tất cả được lưu cục bộ trong trình duyệt của bạn để có trải nghiệm ổn định hơn.`;
|
|
},
|
|
"closeAriaLabel": "Không còn hiển thị gợi ý này"
|
|
},
|
|
"about": {},
|
|
"errors": {
|
|
"emptyFile": "",
|
|
"fileTooLarge": "",
|
|
"unpackFailed": "",
|
|
"parseFailed": "",
|
|
"cardNotFound": ""
|
|
}
|
|
},
|
|
"play": {},
|
|
"settings": {},
|
|
"auth": {},
|
|
"history": {},
|
|
"customForm": {},
|
|
"language": {
|
|
"title": "",
|
|
"current": "",
|
|
"select": ""
|
|
}
|
|
} as const;
|
|
|
|
export type ViTranslations = typeof vi;
|