Files
infiplot-web/public/home/firstact-ja/f13.json
T
yuanzonghao 0a7076d5b9 fix(i18n): overhaul i18n with [locale] routing, SSR translations, and hreflang SEO
Rewrites the i18n system introduced in PR #94 to use Next.js App Router
[locale] dynamic segments with SSR-rendered translations and proper
middleware locale routing.

- Add middleware locale detection: / rewrites to /zh-CN/ internally,
  /en and /ja pass through, /zh-CN/... redirects to bare path
- Move all 7 pages under app/[locale]/ with SSR translation injection
- Fix server→client serialization: pre-evaluate function-valued
  translations (makeSerializable) to eliminate hydration flash
- Fix language switch key flash: use hard navigation with localStorage-
  only persistence, avoiding React state update before page reload
- Add <link rel="alternate" hreflang> tags for multilingual SEO
- Fix Supabase setAll overwriting locale rewrite response
- Trim locales from 22 to 3 (zh-CN/en/ja), delete 19 incomplete files
- LLM-translate 240 firstact game preset JSONs (en + ja, landscape +
  portrait) and story titles via gemini-3.5-flash
- Delete 11 one-off migration scripts and outdated i18n docs
- Add useLocalePath hook and navigation utilities

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-18 23:16:17 +08:00

1 line
8.4 KiB
JSON

{"sessionId":"s_1780423171257_1ocl98","scene":{"id":"scene_1780423203950_4khf","scenePrompt":"Wide establishing shot, a cluttered and dimly lit room at night, summer atmosphere. Stacks of old boxes, scattered papers, a vintage tape recorder on a small table, tangled cables on the floor, a single bare bulb casting weak yellow light. The walls are peeling, revealing faint outlines of a cityscape beneath. Through a cracked window, the distant glow of neon signs pulses in the humid air. The space feels claustrophobic yet dreamlike, with a subtle warp effect beginning to distort the edges of the room, blending into a surreal geometric grid floor pattern in purple and pink hues. Muted warm shadows contrast with cool neon hints, creating a tense, atmospheric mood of impending temporal shift.","beats":[{"id":"b1","narration":"夏の夜の汗が首筋に張り付く中、あなたはついに最後の古い荷物の箱を隅に押し込んだ。ヴェイパーウェイヴ風のリサイクルショップで手に入れたあのカセットテープは、プラスチックのケースが色褪せており、まるで古い傷跡のようだ。","next":{"type":"continue","nextBeatId":"b2"}},{"id":"b2","narration":"古びたプレーヤーが『ガチャリ』と音を立ててテープを飲み込む。歯車が回り、サーッというノイズがため息のように響く。そして――一人の若い少女の歌声が、何の前触れもなく静寂を切り裂いた。","next":{"type":"continue","nextBeatId":"b3"}},{"id":"b3","speaker":"あなた","line":"これ……お母さんの声……?","next":{"type":"continue","nextBeatId":"b4"}},{"id":"b4","narration":"歌声は澄み渡り、生命力に満ちあふれている。あなたの記憶にある、病床の母の弱々しい鼻歌とはまるで違っていた。歌詞は聞き取りにくかったが、サビの部分で突然、鮮明に響き渡る――","next":{"type":"continue","nextBeatId":"b5"}},{"id":"b5","narration":"「……夏の夜の風は、明日には届かない……シャオユエン、振り返っちゃダメ……」","next":{"type":"continue","nextBeatId":"b6"}},{"id":"b6","speaker":"あなた","line":"シャオユエン……私を呼んでいるの?","next":{"type":"continue","nextBeatId":"b7"}},{"id":"b7","narration":"心臓が激しく脈打つ。歌声は鳴り止まないが、部屋全体が微かに震え始めた。壁に貼られた古いポスターが丸まり、剥がれ落ち、その下から流動するネオンピンクの光の斑点が現れる。","next":{"type":"continue","nextBeatId":"b8"}},{"id":"b8","narration":"光の斑点は瞬く間に広がり、散らかった荷物を、そして壁を飲み込んでいく。空気の中でネオン看板の漢字が明滅し、再構築されるのが見える――『ビデオ店』『ディスコ』。音の発生源から、凄まじい吸引力が沸き起こった。","next":{"type":"choice","choices":[{"id":"c1","label":"カセットテープを必死に掴む","effect":{"kind":"change-scene","nextSceneSeed":"1988年、ネオンが煌めく街角。あなたは歩道にへたり込んでいた。カセットテープを手のひらに固く握りしめ、周囲には見知らぬ古い時代の通行人たちが行き交っている。"}},{"id":"c2","label":"プレーヤーを止めようとする","effect":{"kind":"change-scene","nextSceneSeed":"時空の渦の中、ネオンの光影がデータストリームのように駆け抜ける。あなたは1988年の空へと真っ逆さまに落ちていく。"}}]}}],"entryBeatId":"b1","sceneKey":"cluttered-room-night","imageUuid":"f7a2304a-f893-4f0c-8da2-0363116d6e45","imageUrl":"/home/firstscene/f13.webp"},"imageUrl":"/home/firstscene/f13.webp","characters":[],"storyState":{"logline":"亡き母の若かりし頃の歌声を偶然耳にしたあなたは、時空を超えて彼女の運命を変えようとする。しかし、そこで彼女があなたのために封印した、あなたの存在そのものを揺るがすほどの禁断の恋を知ることになる。","genreTags":"タイムトラベル / サスペンス恋愛 / ヴェイパーウェイヴ美学 / ショートドラマ風大どんでん返し","protagonist":"あなた。最愛の母を亡くしたばかりの若い女性。ヴェイパーウェイヴな雰囲気漂うリサイクルショップで、謎めいたカセットテープを手に入れる。再生すると、若き日の母の歌声が聞こえ、過去に戻って彼女の早すぎる死という運命を変えたいと願う。しかし心の奥底では、母が一度も語らなかった過去を知ることを恐れており、それが自分の存在の根底を揺るがすのではないかと怯えている。『母を救いたい』という願いと『真実への恐怖』という矛盾した葛藤に苛まれている。","castNotes":"林月棠(リン・ユエタン/母親):80年代の反抗的な少女。歌声は生命力に満ちているが、実は誰にも言えない禁断の恋と家族の秘密を背負っている。タイムスリップしたあなたは彼女に出会うが、『娘』として名乗ることはできない。\n沈黙(シェン・モー):80年代の謎めいた転校生。林月棠の秘密の恋人。冷淡に見えて実は一途。彼の存在がすべてを変える鍵となるか、あるいはすべての悲劇の元凶となるか。\n老陳(ラオチェン):80年代のビデオ店の店主。過去の秘密を多く知る、タイムスリップ後のあなたの唯一の潜在的味方。しかし、彼は林月棠の死に何らかの関わりがあるようだ。","synopsis":"主人公は夏の夜、手に入れた古いカセットテープを再生し、亡き母・林月棠の若かりし頃の歌声を耳にする。しかも歌詞は、主人公の名前である『シャオユエン』を直接呼んでいた。歌声は時空の歪みを引き起こし、部屋はネオンの渦へと変化。主人公は1988年へと引きずり込まれていく。","openThreads":["なぜカセットテープから主人公の名前『シャオユエン』を呼ぶ歌声が流れたのか","母の歌声にある『振り返っちゃダメ』という警告の意味","タイムスリップの仕組みと、その代償"],"relationships":["林月棠(録音):若き日の声は未知の活力と秘密に満ちており、タイムスリップ前の唯一の『繋がり』"],"nextHook":"次回:タイムスリップが完了し、主人公は1988年の街頭に現れる。自身の状況を確認し、歌声の光源や手がかりを探す必要がある。"},"cardName":"f13","cardTitle":"ノスタルジック・サマー・ラブレター","cardGender":"女性向け","worldSetting":"本作は【女性向け】のAIインタラクティブストーリーゲームです。全体として、ショート動画(縦型ショートドラマ)のような強いドラマチックな衝突とスピーディーな大どんでん返しが特徴です。\nストーリースタイル:マルチエンディング・急展開。テンポ:緊迫感があり爽快。\n厳選ストーリー『ノスタルジック・サマー・ラブレター』のオープニング設定:彼女はリサイクルショップで80年代のカセットテープを手に入れる。それを再生すると、なんと亡き母の若かりし頃の歌声が聞こえてきた。その声を頼りに、彼女は母の青春時代へとタイムスリップし、母の早すぎる死という運命を変えようとするが、そこで母が語ることのなかった禁断の恋を知ることになる。\nプレイヤーに強い没入感とカタルシスを与えるため、このオープニングから直接物語に入り込んでください。その後の選択肢もショートドラマのような高頻度のどんでん返しを維持し、プレイヤーの選択がすぐに展開に反映されるようにします。","styleGuide":"Vaporwave aesthetic, vertical composition. A gorgeous, highly stylized character with purple hair and striking facial contours, looking over lowered sunglasses in a retro summer setting. Geometric pink grid floor, palm trees, purple ocean sunset. Glitch filters, retro neon pink and cyan palette.","imageUrlRemote":"https://im.runware.ai/image/os/a07dlim3/ws/3/ii/f7a2304a-f893-4f0c-8da2-0363116d6e45.png"}