feat(i18n): translate the scene template center

Adds the 18 `sceneTemplate.*` keys plus `fileMenu.newFromTemplate` to
all 15 locales. Until now the panel fell back to hardcoded Chinese, so
every non-Chinese user saw Chinese labels in an otherwise translated UI.

Simplified Chinese is taken verbatim from `scene_templates.toml` and
`TemplateScene::title_fallback()`, so the catalogue and the catalogue's
translation cannot drift apart while both exist.

The hardcoded fallbacks in `scene_template_panel` stay: they now only
fire when a key is missing, which is a backstop rather than the normal
path — and one that has already earned its place, since the panel
shipped ahead of these keys.

A dedicated integrity test asserts all 18 keys resolve in all 15
locales, on top of the existing cross-locale key-set equality.

The catalogue size moves 1273 -> 1291. The handoff for this work said
1263 -> 1281, computed against a stale baseline; taking that number
would have failed the integrity gate outright.

Co-authored-by: Codex <codex@openai.com>
Claude-Session: https://claude.ai/code/session_01FqKQqNj8exYwopGDpYUU7x
This commit is contained in:
Fini 2026-08-02 11:02:33 +08:00
parent 52e0bf1078
commit bf4a028ce9
16 changed files with 432 additions and 1 deletions

View file

@ -251,7 +251,7 @@ fn placeholders(value: &str) -> BTreeSet<String> {
fn every_locale_has_exactly_the_english_key_set() {
let all_tables = tables();
let expected = table_keys(all_tables[0].0, all_tables[0].1, all_tables[0].2);
assert_eq!(expected.len(), 1276, "update the intentional catalog size");
assert_eq!(expected.len(), 1294, "update the intentional catalog size");
for (name, main, git, lookup) in all_tables {
let actual = table_keys(name, main, git);
@ -271,6 +271,37 @@ fn every_locale_has_exactly_the_english_key_set() {
}
}
#[test]
fn scene_template_catalog_is_complete_in_all_fifteen_locales() {
for key in [
"sceneTemplate.title",
"sceneTemplate.searchPlaceholder",
"sceneTemplate.empty",
"sceneTemplate.frames",
"sceneTemplate.filter.all",
"sceneTemplate.scene.tutorial",
"sceneTemplate.scene.comparison",
"sceneTemplate.scene.carousel",
"sceneTemplate.scene.slides",
"sceneTemplate.item.screenshotTutorial.title",
"sceneTemplate.item.screenshotTutorial.summary",
"sceneTemplate.item.knowledgeCarousel.title",
"sceneTemplate.item.knowledgeCarousel.summary",
"sceneTemplate.item.beforeAfter.title",
"sceneTemplate.item.beforeAfter.summary",
"sceneTemplate.item.slideDeck.title",
"sceneTemplate.item.slideDeck.summary",
"fileMenu.newFromTemplate",
] {
for (name, _, _, lookup) in tables() {
assert!(
lookup(key).is_some(),
"locale `{name}` is missing direct Scene Template Center key `{key}`"
);
}
}
}
#[test]
fn collaboration_catalog_is_complete_in_all_fifteen_locales() {
let all_tables = tables();

View file

@ -82,6 +82,32 @@ pub fn lookup(key: &str) -> Option<&'static str> {
"collab.action.confirmOwner" => "Dieser Sitzung beitreten",
"collab.action.rejectOwner" => "Nicht beitreten",
"collab.error.ownerNotConfirmed" => "Du hast den Host nicht bestätigt, daher wurde nichts geladen.",
"sceneTemplate.title" => "Szenenvorlagen",
"sceneTemplate.searchPlaceholder" => "Szenen oder Vorlagen suchen…",
"sceneTemplate.empty" => "Keine passenden Vorlagen gefunden",
"sceneTemplate.frames" => "Seiten: {{count}}",
"sceneTemplate.filter.all" => "Alle",
"sceneTemplate.scene.tutorial" => "Tutorialgrafik",
"sceneTemplate.scene.comparison" => "Vergleichsgrafik",
"sceneTemplate.scene.carousel" => "Wissenskarten",
"sceneTemplate.scene.slides" => "Präsentation",
"sceneTemplate.item.screenshotTutorial.title" => "Screenshot-Tutorial · 3 Schritte",
"sceneTemplate.item.screenshotTutorial.summary" => {
"Cover, drei Anleitungsschritte und ein abschließender Call-to-Action. Screenshots und Texte ersetzen fertig zur Veröffentlichung."
}
"sceneTemplate.item.knowledgeCarousel.title" => "Wissens- und Insights-Karussell",
"sceneTemplate.item.knowledgeCarousel.summary" => {
"Cover, drei Kernpunkte und eine Zusammenfassung ideal, um einen Gedanken in wischbare Karten aufzuteilen."
}
"sceneTemplate.item.beforeAfter.title" => "Redesign-Vergleich: Vorher/Nachher",
"sceneTemplate.item.beforeAfter.summary" => {
"Vorher und Nachher nebeneinander mit Hinweisen zu den Änderungen ideal für Retrospektiven und Portfolios."
}
"sceneTemplate.item.slideDeck.title" => "Präsentation · 6 Folien",
"sceneTemplate.item.slideDeck.summary" => {
"Cover, Agenda, Kernpunkte, Daten, Diagramm und Abschluss im 16:9-Format. Texte ersetzen und präsentieren."
}
"fileMenu.newFromTemplate" => "Neu aus Vorlage",
_ => return super::de_collab::lookup(key),
})
}

View file

@ -97,6 +97,32 @@ pub fn lookup(key: &str) -> Option<&'static str> {
"collab.action.confirmOwner" => "Join this session",
"collab.action.rejectOwner" => "Do not join",
"collab.error.ownerNotConfirmed" => "You did not confirm the host, so nothing was loaded.",
"sceneTemplate.title" => "Scene Templates",
"sceneTemplate.searchPlaceholder" => "Search scenes or templates",
"sceneTemplate.empty" => "No matching templates",
"sceneTemplate.frames" => "Pages: {{count}}",
"sceneTemplate.filter.all" => "All",
"sceneTemplate.scene.tutorial" => "Tutorial Graphic",
"sceneTemplate.scene.comparison" => "Comparison Graphic",
"sceneTemplate.scene.carousel" => "Knowledge Cards",
"sceneTemplate.scene.slides" => "Presentation",
"sceneTemplate.item.screenshotTutorial.title" => "Three-Step Screenshot Tutorial Cards",
"sceneTemplate.item.screenshotTutorial.summary" => {
"A cover, three how-to steps, and a closing call to action. Replace the screenshots and instructions to publish."
}
"sceneTemplate.item.knowledgeCarousel.title" => "Knowledge and Insights Carousel",
"sceneTemplate.item.knowledgeCarousel.summary" => {
"A cover, three key points, and a summary page—ideal for breaking one idea into a continuous, swipeable card series."
}
"sceneTemplate.item.beforeAfter.title" => "Before-and-After Redesign Comparison",
"sceneTemplate.item.beforeAfter.summary" => {
"A side-by-side before-and-after comparison with notes on the changes, ideal for retrospectives and portfolio showcases."
}
"sceneTemplate.item.slideDeck.title" => "Presentation · Six Slides",
"sceneTemplate.item.slideDeck.summary" => {
"A cover, agenda, key points, data, charts, and a closing slide in 16:9 presentation format. Replace the copy and present."
}
"fileMenu.newFromTemplate" => "New from Template",
_ => return super::en_collab::lookup(key),
})
}

View file

@ -84,6 +84,32 @@ pub fn lookup(key: &str) -> Option<&'static str> {
"collab.action.confirmOwner" => "Unirse a esta sesión",
"collab.action.rejectOwner" => "No unirse",
"collab.error.ownerNotConfirmed" => "No confirmaste al anfitrión, así que no se cargó nada.",
"sceneTemplate.title" => "Plantillas de escenas",
"sceneTemplate.searchPlaceholder" => "Buscar escenas o plantillas…",
"sceneTemplate.empty" => "No hay plantillas que coincidan",
"sceneTemplate.frames" => "Páginas: {{count}}",
"sceneTemplate.filter.all" => "Todo",
"sceneTemplate.scene.tutorial" => "Tutorial",
"sceneTemplate.scene.comparison" => "Comparativa",
"sceneTemplate.scene.carousel" => "Tarjetas de conocimiento",
"sceneTemplate.scene.slides" => "PPT",
"sceneTemplate.item.screenshotTutorial.title" => "Tutorial con capturas · 3 pasos",
"sceneTemplate.item.screenshotTutorial.summary" => {
"Portada, tres pasos y una llamada a la acción final. Sustituye las capturas y el texto para publicar."
}
"sceneTemplate.item.knowledgeCarousel.title" => "Carrusel de conocimiento e ideas",
"sceneTemplate.item.knowledgeCarousel.summary" => {
"Portada, tres ideas clave y una página de resumen, ideal para convertir un punto de vista en tarjetas para deslizar."
}
"sceneTemplate.item.beforeAfter.title" => "Comparativa antes/después",
"sceneTemplate.item.beforeAfter.summary" => {
"Comparativa antes/después en paralelo, con notas sobre los cambios; ideal para retrospectivas y portfolios."
}
"sceneTemplate.item.slideDeck.title" => "Presentación · 6 diapositivas",
"sceneTemplate.item.slideDeck.summary" => {
"Portada, agenda, puntos clave, datos, gráfico y cierre, en formato 16:9. Sustituye el texto y estará lista para presentar."
}
"fileMenu.newFromTemplate" => "Nuevo a partir de una plantilla",
_ => return super::es_collab::lookup(key),
})
}

View file

@ -84,6 +84,32 @@ pub fn lookup(key: &str) -> Option<&'static str> {
"collab.action.confirmOwner" => "Rejoindre cette session",
"collab.action.rejectOwner" => "Ne pas rejoindre",
"collab.error.ownerNotConfirmed" => "Vous navez pas confirmé lhôte, rien na été chargé.",
"sceneTemplate.title" => "Modèles de scènes",
"sceneTemplate.searchPlaceholder" => "Rechercher des scènes ou des modèles…",
"sceneTemplate.empty" => "Aucun modèle correspondant",
"sceneTemplate.frames" => "Pages : {{count}}",
"sceneTemplate.filter.all" => "Tous",
"sceneTemplate.scene.tutorial" => "Tutoriel illustré",
"sceneTemplate.scene.comparison" => "Comparatif",
"sceneTemplate.scene.carousel" => "Cartes de connaissances",
"sceneTemplate.scene.slides" => "PPT",
"sceneTemplate.item.screenshotTutorial.title" => "Tutoriel par captures décran · 3 étapes",
"sceneTemplate.item.screenshotTutorial.summary" => {
"Une couverture, trois étapes et un appel à laction final : remplacez les captures décran et les textes pour publier."
}
"sceneTemplate.item.knowledgeCarousel.title" => "Carrousel de connaissances et didées",
"sceneTemplate.item.knowledgeCarousel.summary" => {
"Une couverture, trois idées clés et une page de synthèse, pour décomposer un point de vue en cartes à faire défiler."
}
"sceneTemplate.item.beforeAfter.title" => "Comparatif avant/après",
"sceneTemplate.item.beforeAfter.summary" => {
"Comparaison avant/après côte à côte, accompagnée de notes sur les changements, idéale pour les rétrospectives et les portfolios."
}
"sceneTemplate.item.slideDeck.title" => "Présentation · 6 diapositives",
"sceneTemplate.item.slideDeck.summary" => {
"Couverture, sommaire, points clés, données, graphique et conclusion au format 16:9. Remplacez les textes et présentez."
}
"fileMenu.newFromTemplate" => "Nouveau à partir dun modèle",
_ => return super::fr_collab::lookup(key),
})
}

View file

@ -76,6 +76,32 @@ pub fn lookup(key: &str) -> Option<&'static str> {
"promptCenter.item.componentFormLab.title" => "Form Lab · फ़ॉर्म कॉम्पोनेंट प्रणाली",
"promptCenter.item.modifyPolishCurrent.title" => "वर्तमान स्क्रीन को निखारें",
"promptCenter.item.modifyCompleteStates.title" => "कॉम्पोनेंट की अवस्थाएँ पूरी करें",
"sceneTemplate.title" => "सीन टेम्पलेट",
"sceneTemplate.searchPlaceholder" => "सीन या टेम्पलेट खोजें…",
"sceneTemplate.empty" => "कोई मेल खाता टेम्पलेट नहीं मिला",
"sceneTemplate.frames" => "{{count}} पेज",
"sceneTemplate.filter.all" => "सभी",
"sceneTemplate.scene.tutorial" => "ट्यूटोरियल चित्र",
"sceneTemplate.scene.comparison" => "तुलना चित्र",
"sceneTemplate.scene.carousel" => "ज्ञान कार्ड",
"sceneTemplate.scene.slides" => "PPT",
"sceneTemplate.item.screenshotTutorial.title" => "तीन चरणों वाला स्क्रीनशॉट ट्यूटोरियल कार्ड",
"sceneTemplate.item.screenshotTutorial.summary" => {
"कवर, तीन चरण और अंत में कार्रवाई का आह्वान; स्क्रीनशॉट और टेक्स्ट बदलकर प्रकाशित करें।"
}
"sceneTemplate.item.knowledgeCarousel.title" => "ज्ञान और विचारों की कार्ड-श्रृंखला",
"sceneTemplate.item.knowledgeCarousel.summary" => {
"कवर, तीन मुख्य बिंदु और सारांश पेज; किसी विचार को स्वाइप किए जा सकने वाले क्रमिक कार्डों में बाँटने के लिए उपयुक्त।"
}
"sceneTemplate.item.beforeAfter.title" => "रीडिज़ाइन से पहले और बाद की तुलना",
"sceneTemplate.item.beforeAfter.summary" => {
"बदलावों के नोट्स के साथ पहले और बाद का साथ-साथ तुलनात्मक दृश्य, समीक्षा और पोर्टफ़ोलियो में दिखाने के लिए उपयुक्त।"
}
"sceneTemplate.item.slideDeck.title" => "प्रस्तुति · छह स्लाइड",
"sceneTemplate.item.slideDeck.summary" => {
"कवर, विषय-सूची, मुख्य बिंदु, डेटा, चार्ट और समापन; 16:9 प्रस्तुति अनुपात में, टेक्स्ट बदलते ही प्रस्तुत करने के लिए तैयार।"
}
"fileMenu.newFromTemplate" => "टेम्पलेट से नया बनाएँ",
"collab.ownerConfirm.title" => "पुष्टि करें कि आप किससे जुड़ रहे हैं",
"collab.ownerConfirm.hint" => "इस सत्र से अभी तक कुछ भी लोड नहीं हुआ है।",
"collab.ownerConfirm.account" => "सत्यापित खाता",

View file

@ -80,6 +80,34 @@ pub fn lookup(key: &str) -> Option<&'static str> {
"promptCenter.item.componentFormLab.title" => "Form Lab · Sistem komponen formulir",
"promptCenter.item.modifyPolishCurrent.title" => "Sempurnakan layar saat ini",
"promptCenter.item.modifyCompleteStates.title" => "Lengkapi status komponen",
"sceneTemplate.title" => "Templat Adegan",
"sceneTemplate.searchPlaceholder" => "Cari adegan atau templat…",
"sceneTemplate.empty" => "Tidak ada templat yang cocok",
"sceneTemplate.frames" => "{{count}} halaman",
"sceneTemplate.filter.all" => "Semua",
"sceneTemplate.scene.tutorial" => "Gambar tutorial",
"sceneTemplate.scene.comparison" => "Gambar perbandingan",
"sceneTemplate.scene.carousel" => "Kartu pengetahuan",
"sceneTemplate.scene.slides" => "PPT",
"sceneTemplate.item.screenshotTutorial.title" => {
"Kartu tutorial tangkapan layar 3 langkah"
}
"sceneTemplate.item.screenshotTutorial.summary" => {
"Berisi sampul, tiga langkah panduan, dan ajakan bertindak di bagian akhir. Ganti tangkapan layar serta penjelasannya, lalu siap diterbitkan."
}
"sceneTemplate.item.knowledgeCarousel.title" => "Karusel pengetahuan dan wawasan",
"sceneTemplate.item.knowledgeCarousel.summary" => {
"Berisi sampul, tiga poin utama, dan halaman rangkuman, cocok untuk memecah satu gagasan menjadi rangkaian kartu yang dapat digeser."
}
"sceneTemplate.item.beforeAfter.title" => "Perbandingan sebelum dan sesudah desain ulang",
"sceneTemplate.item.beforeAfter.summary" => {
"Tampilan sebelum dan sesudah diletakkan berdampingan, dilengkapi catatan perubahan; cocok untuk retrospektif dan portofolio."
}
"sceneTemplate.item.slideDeck.title" => "Presentasi · 6 slide",
"sceneTemplate.item.slideDeck.summary" => {
"Berisi sampul, agenda, poin utama, data, grafik, dan penutup dalam rasio presentasi 16:9. Cukup ganti teksnya, lalu siap dipresentasikan."
}
"fileMenu.newFromTemplate" => "Buat dari templat",
"collab.ownerConfirm.title" => "Konfirmasi siapa yang Anda ikuti",
"collab.ownerConfirm.hint" => "Belum ada apa pun dari sesi ini yang dimuat.",
"collab.ownerConfirm.account" => "Akun terverifikasi",

View file

@ -88,6 +88,34 @@ pub fn lookup(key: &str) -> Option<&'static str> {
"collab.action.confirmOwner" => "このセッションに参加",
"collab.action.rejectOwner" => "参加しない",
"collab.error.ownerNotConfirmed" => "ホストを確認しなかったため、何も読み込まれませんでした。",
"sceneTemplate.title" => "シーンテンプレート",
"sceneTemplate.searchPlaceholder" => "シーンやテンプレートを検索…",
"sceneTemplate.empty" => "一致するテンプレートがありません",
"sceneTemplate.frames" => "{{count}}ページ",
"sceneTemplate.filter.all" => "すべて",
"sceneTemplate.scene.tutorial" => "チュートリアル画像",
"sceneTemplate.scene.comparison" => "比較画像",
"sceneTemplate.scene.carousel" => "ナレッジカード",
"sceneTemplate.scene.slides" => "PPT",
"sceneTemplate.item.screenshotTutorial.title" => {
"3ステップのスクリーンショットチュートリアルカード"
}
"sceneTemplate.item.screenshotTutorial.summary" => {
"表紙、3つの操作ステップ、最後のCTAで構成。スクリーンショットと説明を差し替えるだけで公開できます。"
}
"sceneTemplate.item.knowledgeCarousel.title" => "ナレッジ・インサイトカルーセル",
"sceneTemplate.item.knowledgeCarousel.summary" => {
"表紙、3つの論点、まとめページで構成。1つの主張をスワイプできる連続カードに展開するのに最適です。"
}
"sceneTemplate.item.beforeAfter.title" => "リニューアル前後の比較",
"sceneTemplate.item.beforeAfter.summary" => {
"左右に並べたビフォー・アフターに変更内容を添え、振り返りや作品紹介に最適です。"
}
"sceneTemplate.item.slideDeck.title" => "プレゼンテーション · 6ページ",
"sceneTemplate.item.slideDeck.summary" => {
"表紙、目次、要点、データ、グラフ、締めの6ページ構成。16:9の投影比率で、テキストを差し替えるだけで発表できます。"
}
"fileMenu.newFromTemplate" => "テンプレートから新規作成",
_ => return super::ja_collab::lookup(key),
})
}

View file

@ -88,6 +88,32 @@ pub fn lookup(key: &str) -> Option<&'static str> {
"collab.action.confirmOwner" => "이 세션에 참여",
"collab.action.rejectOwner" => "참여 안 함",
"collab.error.ownerNotConfirmed" => "호스트를 확인하지 않아 아무것도 불러오지 않았습니다.",
"sceneTemplate.title" => "장면 템플릿",
"sceneTemplate.searchPlaceholder" => "장면 또는 템플릿 검색…",
"sceneTemplate.empty" => "일치하는 템플릿이 없습니다",
"sceneTemplate.frames" => "{{count}}페이지",
"sceneTemplate.filter.all" => "전체",
"sceneTemplate.scene.tutorial" => "튜토리얼 이미지",
"sceneTemplate.scene.comparison" => "비교 이미지",
"sceneTemplate.scene.carousel" => "지식 카드",
"sceneTemplate.scene.slides" => "PPT",
"sceneTemplate.item.screenshotTutorial.title" => "3단계 스크린샷 튜토리얼 카드",
"sceneTemplate.item.screenshotTutorial.summary" => {
"표지, 3단계 작업, 마지막 CTA로 구성되어 있어 스크린샷과 설명만 바꾸면 바로 게시할 수 있습니다."
}
"sceneTemplate.item.knowledgeCarousel.title" => "지식·인사이트 캐러셀",
"sceneTemplate.item.knowledgeCarousel.summary" => {
"표지, 세 가지 논점, 요약 페이지로 구성되어 있어 하나의 관점을 넘겨 보는 연속 카드로 풀어내기에 적합합니다."
}
"sceneTemplate.item.beforeAfter.title" => "개편 전후 비교",
"sceneTemplate.item.beforeAfter.summary" => {
"전후 화면을 좌우로 나란히 배치하고 변경 설명을 더해, 회고나 작업물 소개에 적합합니다."
}
"sceneTemplate.item.slideDeck.title" => "프레젠테이션 · 6페이지",
"sceneTemplate.item.slideDeck.summary" => {
"표지, 목차, 핵심 내용, 데이터, 차트, 마무리로 구성된 16:9 발표 자료로, 문구만 바꾸면 바로 발표할 수 있습니다."
}
"fileMenu.newFromTemplate" => "템플릿에서 새로 만들기",
_ => return super::ko_collab::lookup(key),
})
}

View file

@ -84,6 +84,32 @@ pub fn lookup(key: &str) -> Option<&'static str> {
"collab.action.confirmOwner" => "Entrar nesta sessão",
"collab.action.rejectOwner" => "Não entrar",
"collab.error.ownerNotConfirmed" => "Você não confirmou o anfitrião, então nada foi carregado.",
"sceneTemplate.title" => "Modelos de cenas",
"sceneTemplate.searchPlaceholder" => "Pesquisar cenas ou modelos…",
"sceneTemplate.empty" => "Nenhum modelo correspondente",
"sceneTemplate.frames" => "Páginas: {{count}}",
"sceneTemplate.filter.all" => "Tudo",
"sceneTemplate.scene.tutorial" => "Tutorial",
"sceneTemplate.scene.comparison" => "Comparativo",
"sceneTemplate.scene.carousel" => "Cards de conhecimento",
"sceneTemplate.scene.slides" => "PPT",
"sceneTemplate.item.screenshotTutorial.title" => "Tutorial com capturas · 3 passos",
"sceneTemplate.item.screenshotTutorial.summary" => {
"Capa, três passos e uma chamada para ação no final. Substitua as capturas de tela e os textos para publicar."
}
"sceneTemplate.item.knowledgeCarousel.title" => "Carrossel de conhecimento e ideias",
"sceneTemplate.item.knowledgeCarousel.summary" => {
"Capa, três pontos e uma página de resumo, ideal para transformar uma ideia em cards deslizáveis."
}
"sceneTemplate.item.beforeAfter.title" => "Comparativo antes e depois",
"sceneTemplate.item.beforeAfter.summary" => {
"Comparação lado a lado do antes e depois, com notas das mudanças; ideal para retrospectivas e portfólios."
}
"sceneTemplate.item.slideDeck.title" => "Apresentação · 6 slides",
"sceneTemplate.item.slideDeck.summary" => {
"Capa, agenda, pontos-chave, dados, gráfico e encerramento, no formato 16:9. Substitua os textos e apresente."
}
"fileMenu.newFromTemplate" => "Novo a partir de um modelo",
_ => return super::pt_collab::lookup(key),
})
}

View file

@ -80,6 +80,32 @@ pub fn lookup(key: &str) -> Option<&'static str> {
"collab.action.confirmOwner" => "Присоединиться к сеансу",
"collab.action.rejectOwner" => "Не присоединяться",
"collab.error.ownerNotConfirmed" => "Вы не подтвердили ведущего, поэтому ничего не загружено.",
"sceneTemplate.title" => "Шаблоны сцен",
"sceneTemplate.searchPlaceholder" => "Поиск сцен и шаблонов…",
"sceneTemplate.empty" => "Подходящих шаблонов не найдено",
"sceneTemplate.frames" => "Страницы: {{count}}",
"sceneTemplate.filter.all" => "Все",
"sceneTemplate.scene.tutorial" => "Обучающая графика",
"sceneTemplate.scene.comparison" => "Сравнительная графика",
"sceneTemplate.scene.carousel" => "Карточки знаний",
"sceneTemplate.scene.slides" => "Презентация",
"sceneTemplate.item.screenshotTutorial.title" => "Скриншот-инструкция · 3 шага",
"sceneTemplate.item.screenshotTutorial.summary" => {
"Обложка, три шага и финальный призыв к действию. Замените скриншоты и текст — и можно публиковать."
}
"sceneTemplate.item.knowledgeCarousel.title" => "Карусель знаний и идей",
"sceneTemplate.item.knowledgeCarousel.summary" => {
"Обложка, три тезиса и итоговый слайд — удобно разложить одну идею на последовательные карточки для свайпа."
}
"sceneTemplate.item.beforeAfter.title" => "Сравнение редизайна «до/после»",
"sceneTemplate.item.beforeAfter.summary" => {
"Версии до и после рядом с пояснениями изменений — для ретроспектив и портфолио."
}
"sceneTemplate.item.slideDeck.title" => "Презентация · 6 слайдов",
"sceneTemplate.item.slideDeck.summary" => {
"Обложка, повестка, ключевые тезисы, данные, диаграмма и финал в формате 16:9. Замените текст — и можно выступать."
}
"fileMenu.newFromTemplate" => "Создать из шаблона",
_ => return super::ru_collab::lookup(key),
})
}

View file

@ -78,6 +78,34 @@ pub fn lookup(key: &str) -> Option<&'static str> {
"promptCenter.item.componentFormLab.title" => "Form Lab · ระบบคอมโพเนนต์ฟอร์ม",
"promptCenter.item.modifyPolishCurrent.title" => "ปรับแต่งหน้าจอปัจจุบัน",
"promptCenter.item.modifyCompleteStates.title" => "เติมสถานะคอมโพเนนต์ให้ครบ",
"sceneTemplate.title" => "เทมเพลตฉาก",
"sceneTemplate.searchPlaceholder" => "ค้นหาฉากหรือเทมเพลต…",
"sceneTemplate.empty" => "ไม่พบเทมเพลตที่ตรงกัน",
"sceneTemplate.frames" => "{{count}} หน้า",
"sceneTemplate.filter.all" => "ทั้งหมด",
"sceneTemplate.scene.tutorial" => "ภาพสอนใช้งาน",
"sceneTemplate.scene.comparison" => "ภาพเปรียบเทียบ",
"sceneTemplate.scene.carousel" => "การ์ดความรู้",
"sceneTemplate.scene.slides" => "PPT",
"sceneTemplate.item.screenshotTutorial.title" => {
"การ์ดสอนใช้งานด้วยภาพหน้าจอ 3 ขั้นตอน"
}
"sceneTemplate.item.screenshotTutorial.summary" => {
"ประกอบด้วยหน้าปก ขั้นตอนการใช้งาน 3 ขั้น และคำกระตุ้นการตัดสินใจตอนท้าย เพียงเปลี่ยนภาพหน้าจอและคำอธิบายก็พร้อมเผยแพร่"
}
"sceneTemplate.item.knowledgeCarousel.title" => "คารูเซลความรู้และมุมมอง",
"sceneTemplate.item.knowledgeCarousel.summary" => {
"ประกอบด้วยหน้าปก ประเด็นหลัก 3 ข้อ และหน้าสรุป เหมาะสำหรับแยกหนึ่งแนวคิดเป็นการ์ดต่อเนื่องที่ปัดดูได้"
}
"sceneTemplate.item.beforeAfter.title" => "เปรียบเทียบก่อนและหลังปรับดีไซน์",
"sceneTemplate.item.beforeAfter.summary" => {
"วางภาพก่อนและหลังเทียบกันซ้ายขวา พร้อมคำอธิบายการเปลี่ยนแปลง เหมาะสำหรับการสรุปบทเรียนและนำเสนอในพอร์ตโฟลิโอ"
}
"sceneTemplate.item.slideDeck.title" => "งานนำเสนอ · 6 สไลด์",
"sceneTemplate.item.slideDeck.summary" => {
"ประกอบด้วยหน้าปก สารบัญ ประเด็นสำคัญ ข้อมูล แผนภูมิ และหน้าปิด ในอัตราส่วนฉายภาพ 16:9 เพียงเปลี่ยนข้อความก็พร้อมนำเสนอ"
}
"fileMenu.newFromTemplate" => "สร้างใหม่จากเทมเพลต",
"collab.ownerConfirm.title" => "ยืนยันว่าคุณกำลังเข้าร่วมกับใคร",
"collab.ownerConfirm.hint" => "ยังไม่มีเนื้อหาใดจากเซสชันนี้ถูกโหลด",
"collab.ownerConfirm.account" => "บัญชีที่ยืนยันแล้ว",

View file

@ -72,6 +72,34 @@ pub fn lookup(key: &str) -> Option<&'static str> {
"promptCenter.item.componentFormLab.title" => "Form Lab · Form bileşeni sistemi",
"promptCenter.item.modifyPolishCurrent.title" => "Mevcut ekranı iyileştir",
"promptCenter.item.modifyCompleteStates.title" => "Bileşen durumlarını tamamla",
"sceneTemplate.title" => "Sahne Şablonları",
"sceneTemplate.searchPlaceholder" => "Sahne veya şablon ara…",
"sceneTemplate.empty" => "Eşleşen şablon bulunamadı",
"sceneTemplate.frames" => "{{count}} sayfa",
"sceneTemplate.filter.all" => "Tümü",
"sceneTemplate.scene.tutorial" => "Eğitim görseli",
"sceneTemplate.scene.comparison" => "Karşılaştırma görseli",
"sceneTemplate.scene.carousel" => "Bilgi kartları",
"sceneTemplate.scene.slides" => "PPT",
"sceneTemplate.item.screenshotTutorial.title" => {
"Üç adımlı ekran görüntülü eğitim kartı"
}
"sceneTemplate.item.screenshotTutorial.summary" => {
"Kapak, üç işlem adımı ve son harekete geçirici mesaj; ekran görüntülerini ve metni değiştirip yayımlayın."
}
"sceneTemplate.item.knowledgeCarousel.title" => "Bilgi ve içgörü karuseli",
"sceneTemplate.item.knowledgeCarousel.summary" => {
"Kapak, üç ana fikir ve özet sayfası; tek bir fikri kaydırılabilir ardışık kartlara bölmek için ideal."
}
"sceneTemplate.item.beforeAfter.title" => "Yeniden tasarım öncesi ve sonrası",
"sceneTemplate.item.beforeAfter.summary" => {
"Değişiklik notlarıyla yan yana önce/sonra karşılaştırması; geriye dönük değerlendirmeler ve portföy sunumları için ideal."
}
"sceneTemplate.item.slideDeck.title" => "Sunum · Altı slayt",
"sceneTemplate.item.slideDeck.summary" => {
"Kapak, gündem, ana noktalar, veriler, grafik ve kapanış; 16:9 sunum oranında, metni değiştirip sunmaya hazır."
}
"fileMenu.newFromTemplate" => "Şablondan yeni oluştur",
"collab.ownerConfirm.title" => "Kime katıldığınızı onaylayın",
"collab.ownerConfirm.hint" => "Bu oturumdan henüz hiçbir şey yüklenmedi.",
"collab.ownerConfirm.account" => "Doğrulanmış hesap",

View file

@ -82,6 +82,34 @@ pub fn lookup(key: &str) -> Option<&'static str> {
"promptCenter.item.componentFormLab.title" => "Form Lab · Hệ thống thành phần biểu mẫu",
"promptCenter.item.modifyPolishCurrent.title" => "Tinh chỉnh màn hình hiện tại",
"promptCenter.item.modifyCompleteStates.title" => "Hoàn thiện các trạng thái thành phần",
"sceneTemplate.title" => "Mẫu cảnh",
"sceneTemplate.searchPlaceholder" => "Tìm cảnh hoặc mẫu…",
"sceneTemplate.empty" => "Không tìm thấy mẫu phù hợp",
"sceneTemplate.frames" => "{{count}} trang",
"sceneTemplate.filter.all" => "Tất cả",
"sceneTemplate.scene.tutorial" => "Ảnh hướng dẫn",
"sceneTemplate.scene.comparison" => "Ảnh so sánh",
"sceneTemplate.scene.carousel" => "Thẻ kiến thức",
"sceneTemplate.scene.slides" => "PPT",
"sceneTemplate.item.screenshotTutorial.title" => {
"Thẻ hướng dẫn 3 bước bằng ảnh chụp màn hình"
}
"sceneTemplate.item.screenshotTutorial.summary" => {
"Gồm trang bìa, ba bước thao tác và lời kêu gọi hành động ở cuối; chỉ cần thay ảnh chụp màn hình và phần mô tả là có thể đăng."
}
"sceneTemplate.item.knowledgeCarousel.title" => "Chuỗi thẻ kiến thức và góc nhìn",
"sceneTemplate.item.knowledgeCarousel.summary" => {
"Gồm trang bìa, ba luận điểm và trang tổng kết, phù hợp để tách một góc nhìn thành chuỗi thẻ liên tiếp có thể vuốt xem."
}
"sceneTemplate.item.beforeAfter.title" => "So sánh trước và sau khi thiết kế lại",
"sceneTemplate.item.beforeAfter.summary" => {
"Đặt phiên bản trước và sau cạnh nhau, kèm chú thích các thay đổi; phù hợp để nhìn lại dự án và trình bày trong hồ sơ năng lực."
}
"sceneTemplate.item.slideDeck.title" => "Bài thuyết trình · 6 trang",
"sceneTemplate.item.slideDeck.summary" => {
"Gồm trang bìa, mục lục, ý chính, dữ liệu, biểu đồ và trang kết, theo tỷ lệ trình chiếu 16:9; chỉ cần thay nội dung là sẵn sàng thuyết trình."
}
"fileMenu.newFromTemplate" => "Tạo mới từ mẫu",
"collab.ownerConfirm.title" => "Xác nhận bạn đang tham gia phiên của ai",
"collab.ownerConfirm.hint" => "Chưa có nội dung nào của phiên này được tải.",
"collab.ownerConfirm.account" => "Tài khoản đã xác minh",

View file

@ -93,6 +93,32 @@ pub fn lookup(key: &str) -> Option<&'static str> {
"collab.action.confirmOwner" => "加入此会话",
"collab.action.rejectOwner" => "不加入",
"collab.error.ownerNotConfirmed" => "你未确认主持人,因此未载入任何内容。",
"sceneTemplate.title" => "场景模板",
"sceneTemplate.searchPlaceholder" => "搜索场景或模板",
"sceneTemplate.empty" => "没有匹配的模板",
"sceneTemplate.frames" => "{{count}} 页",
"sceneTemplate.filter.all" => "全部",
"sceneTemplate.scene.tutorial" => "教程图",
"sceneTemplate.scene.comparison" => "对比图",
"sceneTemplate.scene.carousel" => "知识卡片",
"sceneTemplate.scene.slides" => "PPT",
"sceneTemplate.item.screenshotTutorial.title" => "三步截图教程卡",
"sceneTemplate.item.screenshotTutorial.summary" => {
"封面、三个操作步骤和结尾行动号召,替换截图与说明即可发布。"
}
"sceneTemplate.item.knowledgeCarousel.title" => "知识观点轮播",
"sceneTemplate.item.knowledgeCarousel.summary" => {
"封面、三个论点和总结页,适合把一个观点拆成可滑动的连续卡片。"
}
"sceneTemplate.item.beforeAfter.title" => "改版前后对比",
"sceneTemplate.item.beforeAfter.summary" => {
"左右并置的前后对比,配改动说明,适合复盘与作品展示。"
}
"sceneTemplate.item.slideDeck.title" => "演示文稿 · 六页",
"sceneTemplate.item.slideDeck.summary" => {
"封面、目录、要点、数据、图表和结尾16:9 投影比例,替换文案即可上台。"
}
"fileMenu.newFromTemplate" => "从模板新建",
_ => return super::zh_cn_collab::lookup(key),
})
}

View file

@ -84,6 +84,32 @@ pub fn lookup(key: &str) -> Option<&'static str> {
"collab.action.confirmOwner" => "加入此工作階段",
"collab.action.rejectOwner" => "不加入",
"collab.error.ownerNotConfirmed" => "你未確認主持人,因此未載入任何內容。",
"sceneTemplate.title" => "場景範本",
"sceneTemplate.searchPlaceholder" => "搜尋場景或範本",
"sceneTemplate.empty" => "沒有符合的範本",
"sceneTemplate.frames" => "{{count}} 頁",
"sceneTemplate.filter.all" => "全部",
"sceneTemplate.scene.tutorial" => "教學圖",
"sceneTemplate.scene.comparison" => "對比圖",
"sceneTemplate.scene.carousel" => "知識卡片",
"sceneTemplate.scene.slides" => "簡報",
"sceneTemplate.item.screenshotTutorial.title" => "三步截圖教學卡",
"sceneTemplate.item.screenshotTutorial.summary" => {
"封面、三個操作步驟和結尾行動呼籲,替換截圖與說明即可發布。"
}
"sceneTemplate.item.knowledgeCarousel.title" => "知識觀點輪播",
"sceneTemplate.item.knowledgeCarousel.summary" => {
"封面、三個論點和總結頁,適合將一個觀點拆成可滑動的連續卡片。"
}
"sceneTemplate.item.beforeAfter.title" => "改版前後對比",
"sceneTemplate.item.beforeAfter.summary" => {
"左右並置的前後對比,搭配改動說明,適合回顧與作品展示。"
}
"sceneTemplate.item.slideDeck.title" => "簡報 · 六頁",
"sceneTemplate.item.slideDeck.summary" => {
"封面、目錄、要點、資料、圖表和結尾16:9 投影比例,替換文案即可上台。"
}
"fileMenu.newFromTemplate" => "從範本新增",
_ => return super::zh_tw_collab::lookup(key),
})
}