JakgritB commited on
Commit
caa2f69
·
1 Parent(s): 461d333

fix(frontend): complete locale dictionaries

Browse files

Fill Thai, Japanese, Chinese, and Korean UI translations for all frontend labels and localize primary-language option labels to avoid mixed-language screens.

Files changed (1) hide show
  1. frontend/src/App.jsx +257 -4
frontend/src/App.jsx CHANGED
@@ -161,6 +161,12 @@ const en = {
161
  platform_tiktok: "TikTok",
162
  platform_youtube_shorts: "YouTube Shorts",
163
  platform_instagram_reels: "Instagram Reels",
 
 
 
 
 
 
164
  };
165
 
166
  const translations = {
@@ -194,7 +200,10 @@ const translations = {
194
  clipCountHelp: "จำนวนคลิปที่อยากให้ AI สร้างจากวิดีโอนี้",
195
  primaryLanguage: "ภาษาหลัก",
196
  platform: "แพลตฟอร์ม",
 
 
197
  youtubeUrl: "ลิงก์ YouTube",
 
198
  videoFile: "ไฟล์วิดีโอ",
199
  pipeline: "ขั้นตอนประมวลผล",
200
  ready: "พร้อม",
@@ -239,6 +248,7 @@ const translations = {
239
  stepVisual: "ตรวจภาพ",
240
  stepRender: "เรนเดอร์",
241
  stepFinal: "สรุปผล",
 
242
  appCta: "สร้างคลิป",
243
  niche_education: "การศึกษา",
244
  niche_gaming: "เกม",
@@ -257,95 +267,335 @@ const translations = {
257
  style_dramatic: "ดราม่า",
258
  style_educational: "สอน/ให้ความรู้",
259
  style_commentary: "วิเคราะห์",
 
260
  platform_youtube_shorts: "YouTube Shorts",
261
  platform_instagram_reels: "Instagram Reels",
 
 
 
 
 
 
262
  },
263
  ja: {
264
  ...en,
265
  appSubtitle: "AMD ROCm デモ向けクリエイター用クリップ制作ワークスペース",
 
 
 
 
 
 
 
 
 
 
266
  channelProfile: "チャンネル設定",
 
267
  videoInput: "動画入力",
268
  niche: "ジャンル",
 
269
  customNiche: "カスタムジャンル",
 
270
  channelDescription: "チャンネル説明",
 
 
 
271
  clipStyle: "クリップスタイル",
272
  clipLength: "クリップ長(秒)",
273
  clipCount: "クリップ数",
 
274
  primaryLanguage: "主な言語",
275
  platform: "プラットフォーム",
276
- startPipeline: "パイプライン開始",
 
 
 
 
277
  pipeline: "パイプライン",
 
 
 
 
278
  transcript: "文字起こし",
 
279
  clips: "クリップ",
280
  noClips: "まだクリップがありません",
 
 
 
 
 
 
 
281
  openEditor: "エディターを開く",
282
  editor: "クリップエディター",
 
 
 
283
  subtitles: "字幕",
284
  subtitleCues: "字幕キュー",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
285
  approve: "承認",
286
  approved: "承認済み",
287
  regenerate: "再生成",
288
  delete: "削除",
289
  download: "ダウンロード",
290
  backToDashboard: "ダッシュボードへ戻る",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
291
  },
292
  zh: {
293
  ...en,
294
  appSubtitle: "面向 AMD ROCm 演示的创作者剪辑工作台",
 
 
 
 
 
 
 
 
 
 
295
  channelProfile: "频道资料",
 
296
  videoInput: "视频输入",
297
  niche: "频道领域",
 
298
  customNiche: "自定义领域",
 
299
  channelDescription: "频道描述",
 
 
300
  clipStyle: "剪辑风格",
301
  clipLength: "剪辑长度(秒)",
302
  clipCount: "剪辑数量",
 
303
  primaryLanguage: "主要语言",
304
  platform: "平台",
305
- startPipeline: "开始处理",
 
 
 
 
306
  pipeline: "处理流程",
 
 
 
 
307
  transcript: "转录文本",
 
308
  clips: "剪辑",
309
  noClips: "还没有剪辑",
 
 
 
 
 
 
 
310
  openEditor: "打开编辑器",
311
  editor: "剪辑编辑器",
 
 
 
312
  subtitles: "字幕",
313
  subtitleCues: "字幕片段",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
314
  approve: "批准",
315
  approved: "已批准",
316
  regenerate: "重新生成",
317
  delete: "删除",
318
  download: "下载",
319
  backToDashboard: "返回仪表盘",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
320
  },
321
  ko: {
322
  ...en,
323
  appSubtitle: "AMD ROCm 데모를 위한 크리에이터 클립 작업 공간",
 
 
 
 
 
 
 
 
 
 
324
  channelProfile: "채널 프로필",
 
325
  videoInput: "비디오 입력",
326
  niche: "채널 분야",
 
327
  customNiche: "사용자 분야",
 
328
  channelDescription: "채널 설명",
 
 
 
329
  clipStyle: "클립 스타일",
330
  clipLength: "클립 길이(초)",
331
  clipCount: "클립 개수",
 
332
  primaryLanguage: "기본 언어",
333
  platform: "플랫폼",
334
- startPipeline: "파이프라인 시작",
 
 
 
 
335
  pipeline: "파이프라인",
 
 
 
 
336
  transcript: "전사",
 
337
  clips: "클립",
338
  noClips: "아직 클립이 없습니다",
 
 
 
 
 
 
 
339
  openEditor: "편집기 열기",
340
  editor: "클립 편집기",
 
 
 
341
  subtitles: "자막",
342
  subtitleCues: "자막 큐",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
343
  approve: "승인",
344
  approved: "승인됨",
345
  regenerate: "다시 생성",
346
  delete: "삭제",
347
  download: "다운로드",
348
  backToDashboard: "대시보드로 돌아가기",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
349
  },
350
  };
351
 
@@ -653,7 +903,10 @@ function ProfileForm({
653
  label={t("primaryLanguage")}
654
  value={profile.primary_language}
655
  onChange={setProfileValue("primary_language")}
656
- options={LANGUAGE_OPTIONS.map((value) => ({ value, label: value }))}
 
 
 
657
  />
658
  <SelectField
659
  label={t("platform")}
 
161
  platform_tiktok: "TikTok",
162
  platform_youtube_shorts: "YouTube Shorts",
163
  platform_instagram_reels: "Instagram Reels",
164
+ languageOption_Thai: "Thai",
165
+ languageOption_English: "English",
166
+ languageOption_Japanese: "Japanese",
167
+ languageOption_Chinese: "Chinese",
168
+ languageOption_Korean: "Korean",
169
+ languageOption_Auto: "Auto",
170
  };
171
 
172
  const translations = {
 
200
  clipCountHelp: "จำนวนคลิปที่อยากให้ AI สร้างจากวิดีโอนี้",
201
  primaryLanguage: "ภาษาหลัก",
202
  platform: "แพลตฟอร์ม",
203
+ youtube: "YouTube",
204
+ upload: "อัปโหลด",
205
  youtubeUrl: "ลิงก์ YouTube",
206
+ youtubePlaceholder: "https://www.youtube.com/watch?v=...",
207
  videoFile: "ไฟล์วิดีโอ",
208
  pipeline: "ขั้นตอนประมวลผล",
209
  ready: "พร้อม",
 
248
  stepVisual: "ตรวจภาพ",
249
  stepRender: "เรนเดอร์",
250
  stepFinal: "สรุปผล",
251
+ renderProgress: "กำลังเรนเดอร์คลิป {{current}}/{{total}}",
252
  appCta: "สร้างคลิป",
253
  niche_education: "การศึกษา",
254
  niche_gaming: "เกม",
 
267
  style_dramatic: "ดราม่า",
268
  style_educational: "สอน/ให้ความรู้",
269
  style_commentary: "วิเคราะห์",
270
+ platform_tiktok: "TikTok",
271
  platform_youtube_shorts: "YouTube Shorts",
272
  platform_instagram_reels: "Instagram Reels",
273
+ languageOption_Thai: "ไทย",
274
+ languageOption_English: "อังกฤษ",
275
+ languageOption_Japanese: "ญี่ปุ่น",
276
+ languageOption_Chinese: "จีน",
277
+ languageOption_Korean: "เกาหลี",
278
+ languageOption_Auto: "อัตโนมัติ",
279
  },
280
  ja: {
281
  ...en,
282
  appSubtitle: "AMD ROCm デモ向けクリエイター用クリップ制作ワークスペース",
283
+ idle: "待機中",
284
+ queued: "キュー待ち",
285
+ running: "実行中",
286
+ completed: "完了",
287
+ failed: "失敗",
288
+ demoMode: "デモモード",
289
+ productionMode: "本番モード",
290
+ theme: "テーマ",
291
+ language: "言語",
292
+ startPipeline: "処理を開始",
293
  channelProfile: "チャンネル設定",
294
+ channelProfileText: "ハイライトを選ぶ前に、AIへチャンネルの方向性を伝えます。",
295
  videoInput: "動画入力",
296
  niche: "ジャンル",
297
+ nicheHelp: "近いカテゴリを選んでください。具体的なジャンルなら「その他」を選びます。",
298
  customNiche: "カスタムジャンル",
299
+ customNichePlaceholder: "例: 初心者向けタイ語AI講座",
300
  channelDescription: "チャンネル説明",
301
+ channelDescriptionHelp: "自然な言葉で書いてください。AIがブランドらしさの判断に使います。",
302
+ channelDescriptionPlaceholder:
303
+ "例: AIツールをタイ語で、簡単な例と少しのユーモアを交えて説明します。",
304
  clipStyle: "クリップスタイル",
305
  clipLength: "クリップ長(秒)",
306
  clipCount: "クリップ数",
307
+ clipCountHelp: "この動画からAIに生成させる候補クリップの数です。",
308
  primaryLanguage: "主な言語",
309
  platform: "プラットフォーム",
310
+ youtube: "YouTube",
311
+ upload: "アップロード",
312
+ youtubeUrl: "YouTube URL",
313
+ youtubePlaceholder: "https://www.youtube.com/watch?v=...",
314
+ videoFile: "動画ファイル",
315
  pipeline: "パイプライン",
316
+ ready: "準備完了",
317
+ progressNote: "進捗はバックエンドの各工程で更新され、レンダリング中はクリップ単位で表示されます。",
318
+ currentStep: "現在の工程",
319
+ timing: "処理時間",
320
  transcript: "文字起こし",
321
+ transcriptEmpty: "文字起こしが完了するとここに表示されます。",
322
  clips: "クリップ",
323
  noClips: "まだクリップがありません",
324
+ noClipsText: "パイプラインを開始すると、プロフィールに合わせた候補クリップが生成されます。",
325
+ readyClips: "件準備完了",
326
+ score: "スコア",
327
+ reason: "理由",
328
+ duration: "長さ",
329
+ start: "開始",
330
+ end: "終了",
331
  openEditor: "エディターを開く",
332
  editor: "クリップエディター",
333
+ editorText: "このクリップのタイミング、字幕、最終承認を調整します。",
334
+ preview: "プレビュー",
335
+ clipRange: "クリップ範囲",
336
  subtitles: "字幕",
337
  subtitleCues: "字幕キュー",
338
+ subtitleCueHelp: "短い字幕キューのほうがTikTok、Reels、Shortsで読みやすくなります。",
339
+ inspector: "詳細",
340
+ title: "タイトル",
341
+ status: "状態",
342
+ notApproved: "未承認",
343
+ model: "モデル",
344
+ source: "ソース",
345
+ settings: "設定",
346
+ stepInput: "入力",
347
+ stepTranscription: "文字起こし",
348
+ stepHighlights: "ハイライト",
349
+ stepVisual: "映像確認",
350
+ stepRender: "レンダー",
351
+ stepFinal: "仕上げ",
352
+ renderProgress: "クリップ {{current}}/{{total}} をレンダリング中",
353
+ appCta: "クリップ生成",
354
  approve: "承認",
355
  approved: "承認済み",
356
  regenerate: "再生成",
357
  delete: "削除",
358
  download: "ダウンロード",
359
  backToDashboard: "ダッシュボードへ戻る",
360
+ niche_education: "教育",
361
+ niche_gaming: "ゲーム",
362
+ niche_podcast: "ポッドキャスト",
363
+ niche_commentary: "解説",
364
+ niche_cars: "車",
365
+ niche_beauty: "美容",
366
+ niche_fitness: "フィットネス",
367
+ niche_finance: "金融",
368
+ niche_tech: "テック",
369
+ niche_lifestyle: "ライフスタイル",
370
+ niche_music: "音楽",
371
+ niche_other: "その他",
372
+ style_informative: "情報提供",
373
+ style_funny: "面白い",
374
+ style_dramatic: "ドラマチック",
375
+ style_educational: "教育的",
376
+ style_commentary: "解説",
377
+ platform_tiktok: "TikTok",
378
+ platform_youtube_shorts: "YouTube Shorts",
379
+ platform_instagram_reels: "Instagram Reels",
380
+ languageOption_Thai: "タイ語",
381
+ languageOption_English: "英語",
382
+ languageOption_Japanese: "日本語",
383
+ languageOption_Chinese: "中国語",
384
+ languageOption_Korean: "韓国語",
385
+ languageOption_Auto: "自動",
386
  },
387
  zh: {
388
  ...en,
389
  appSubtitle: "面向 AMD ROCm 演示的创作者剪辑工作台",
390
+ idle: "空闲",
391
+ queued: "排队中",
392
+ running: "运行中",
393
+ completed: "已完成",
394
+ failed: "失败",
395
+ demoMode: "演示模式",
396
+ productionMode: "生产模式",
397
+ theme: "主题",
398
+ language: "语言",
399
+ startPipeline: "开始处理",
400
  channelProfile: "频道资料",
401
+ channelProfileText: "在评分高光片段前,先告诉 AI 你的频道定位。",
402
  videoInput: "视频输入",
403
  niche: "频道领域",
404
+ nicheHelp: "选择最接近的类别。如果频道更具体,请选择其他。",
405
  customNiche: "自定义领域",
406
+ customNichePlaceholder: "例如:面向初学者的泰语 AI 教程",
407
  channelDescription: "频道描述",
408
+ channelDescriptionHelp: "可以用自然口语描述。AI 会用它判断内容是否符合频道风格。",
409
+ channelDescriptionPlaceholder: "例如:我用泰语讲解 AI 工具,例子简单,也带一点幽默。",
410
  clipStyle: "剪辑风格",
411
  clipLength: "剪辑长度(秒)",
412
  clipCount: "剪辑数量",
413
+ clipCountHelp: "希望 AI 从这段视频生成多少个候选剪辑。",
414
  primaryLanguage: "主要语言",
415
  platform: "平台",
416
+ youtube: "YouTube",
417
+ upload: "上传",
418
+ youtubeUrl: "YouTube 链接",
419
+ youtubePlaceholder: "https://www.youtube.com/watch?v=...",
420
+ videoFile: "视频文件",
421
  pipeline: "处理流程",
422
+ ready: "准备就绪",
423
+ progressNote: "进度会按后端步骤更新,渲染阶段会显示每个剪辑的状态。",
424
+ currentStep: "当前步骤",
425
+ timing: "耗时",
426
  transcript: "转录文本",
427
+ transcriptEmpty: "转录完成后会显示在这里。",
428
  clips: "剪辑",
429
  noClips: "还没有剪辑",
430
+ noClipsText: "启动流程后,AI 会根据频道资料生成候选剪辑。",
431
+ readyClips: "个已就绪",
432
+ score: "评分",
433
+ reason: "原因",
434
+ duration: "时长",
435
+ start: "开始",
436
+ end: "结束",
437
  openEditor: "打开编辑器",
438
  editor: "剪辑编辑器",
439
+ editorText: "微调这个剪辑的时间、字幕和最终审批状态。",
440
+ preview: "预览",
441
+ clipRange: "剪辑范围",
442
  subtitles: "字幕",
443
  subtitleCues: "字幕片段",
444
+ subtitleCueHelp: "短字幕片段更适合 TikTok、Reels 和 Shorts。",
445
+ inspector: "检查器",
446
+ title: "标题",
447
+ status: "状态",
448
+ notApproved: "未批准",
449
+ model: "模型",
450
+ source: "来源",
451
+ settings: "设置",
452
+ stepInput: "输入",
453
+ stepTranscription: "转录",
454
+ stepHighlights: "高光",
455
+ stepVisual: "视觉检查",
456
+ stepRender: "渲染",
457
+ stepFinal: "完成",
458
+ renderProgress: "正在渲染剪辑 {{current}}/{{total}}",
459
+ appCta: "生成剪辑",
460
  approve: "批准",
461
  approved: "已批准",
462
  regenerate: "重新生成",
463
  delete: "删除",
464
  download: "下载",
465
  backToDashboard: "返回仪表盘",
466
+ niche_education: "教育",
467
+ niche_gaming: "游戏",
468
+ niche_podcast: "播客",
469
+ niche_commentary: "评论解说",
470
+ niche_cars: "汽车",
471
+ niche_beauty: "美妆",
472
+ niche_fitness: "健身",
473
+ niche_finance: "金融",
474
+ niche_tech: "科技",
475
+ niche_lifestyle: "生活方式",
476
+ niche_music: "音乐",
477
+ niche_other: "其他",
478
+ style_informative: "信息型",
479
+ style_funny: "幽默",
480
+ style_dramatic: "戏剧化",
481
+ style_educational: "教学型",
482
+ style_commentary: "评论型",
483
+ platform_tiktok: "TikTok",
484
+ platform_youtube_shorts: "YouTube Shorts",
485
+ platform_instagram_reels: "Instagram Reels",
486
+ languageOption_Thai: "泰语",
487
+ languageOption_English: "英语",
488
+ languageOption_Japanese: "日语",
489
+ languageOption_Chinese: "中文",
490
+ languageOption_Korean: "韩语",
491
+ languageOption_Auto: "自动",
492
  },
493
  ko: {
494
  ...en,
495
  appSubtitle: "AMD ROCm 데모를 위한 크리에이터 클립 작업 공간",
496
+ idle: "대기",
497
+ queued: "대기열",
498
+ running: "실행 중",
499
+ completed: "완료",
500
+ failed: "실패",
501
+ demoMode: "데모 모드",
502
+ productionMode: "프로덕션 모드",
503
+ theme: "테마",
504
+ language: "언어",
505
+ startPipeline: "처리 시작",
506
  channelProfile: "채널 프로필",
507
+ channelProfileText: "하이라이트를 평가하기 전에 AI에게 채널 성격을 알려줍니다.",
508
  videoInput: "비디오 입력",
509
  niche: "채널 분야",
510
+ nicheHelp: "가장 가까운 카테고리를 선택하세요. 더 구체적인 분야라면 기타를 선택하세요.",
511
  customNiche: "사용자 분야",
512
+ customNichePlaceholder: "예: 초보자를 위한 태국어 AI 튜토리얼",
513
  channelDescription: "채널 설명",
514
+ channelDescriptionHelp: "자연스럽게 적어도 됩니다. AI가 채널 스타일 판단에 사용합니다.",
515
+ channelDescriptionPlaceholder:
516
+ "예: AI 도구를 태국어로 쉽게 설명하고 약간의 유머를 섞습니다.",
517
  clipStyle: "클립 스타일",
518
  clipLength: "클립 길이(초)",
519
  clipCount: "클립 개수",
520
+ clipCountHelp: "이 비디오에서 AI가 생성할 후보 클립 개수입니다.",
521
  primaryLanguage: "기본 언어",
522
  platform: "플랫폼",
523
+ youtube: "YouTube",
524
+ upload: "업로드",
525
+ youtubeUrl: "YouTube URL",
526
+ youtubePlaceholder: "https://www.youtube.com/watch?v=...",
527
+ videoFile: "비디오 파일",
528
  pipeline: "파이프라인",
529
+ ready: "준비됨",
530
+ progressNote: "진행률은 백엔드 단계별로 갱신되며, 렌더링 중에는 클립별 상태가 표시됩니다.",
531
+ currentStep: "현재 단계",
532
+ timing: "소요 시간",
533
  transcript: "전사",
534
+ transcriptEmpty: "전사가 끝나면 여기에 표시됩니다.",
535
  clips: "클립",
536
  noClips: "아직 클립이 없습니다",
537
+ noClipsText: "파이프라인을 시작하면 프로필 기반 후보 클립이 생성됩니다.",
538
+ readyClips: "개 준비됨",
539
+ score: "점수",
540
+ reason: "이유",
541
+ duration: "길이",
542
+ start: "시작",
543
+ end: "종료",
544
  openEditor: "편집기 열기",
545
  editor: "클립 편집기",
546
+ editorText: "이 클립의 타이밍, 자막, 최종 승인 상태를 조정합니다.",
547
+ preview: "미리보기",
548
+ clipRange: "클립 범위",
549
  subtitles: "자막",
550
  subtitleCues: "자막 큐",
551
+ subtitleCueHelp: "짧은 자막 큐가 TikTok, Reels, Shorts에서 더 읽기 쉽습니다.",
552
+ inspector: "검사 패널",
553
+ title: "제목",
554
+ status: "상태",
555
+ notApproved: "미승인",
556
+ model: "모델",
557
+ source: "소스",
558
+ settings: "설정",
559
+ stepInput: "입력",
560
+ stepTranscription: "전사",
561
+ stepHighlights: "하이라이트",
562
+ stepVisual: "영상 확인",
563
+ stepRender: "렌더링",
564
+ stepFinal: "마무리",
565
+ renderProgress: "클립 {{current}}/{{total}} 렌더링 중",
566
+ appCta: "클립 생성",
567
  approve: "승인",
568
  approved: "승인됨",
569
  regenerate: "다시 생성",
570
  delete: "삭제",
571
  download: "다운로드",
572
  backToDashboard: "대시보드로 돌아가기",
573
+ niche_education: "교육",
574
+ niche_gaming: "게임",
575
+ niche_podcast: "팟캐스트",
576
+ niche_commentary: "해설",
577
+ niche_cars: "자동차",
578
+ niche_beauty: "뷰티",
579
+ niche_fitness: "피트니스",
580
+ niche_finance: "금융",
581
+ niche_tech: "테크",
582
+ niche_lifestyle: "라이프스타일",
583
+ niche_music: "음악",
584
+ niche_other: "기타",
585
+ style_informative: "정보형",
586
+ style_funny: "재미있는",
587
+ style_dramatic: "극적인",
588
+ style_educational: "교육형",
589
+ style_commentary: "해설형",
590
+ platform_tiktok: "TikTok",
591
+ platform_youtube_shorts: "YouTube Shorts",
592
+ platform_instagram_reels: "Instagram Reels",
593
+ languageOption_Thai: "태국어",
594
+ languageOption_English: "영어",
595
+ languageOption_Japanese: "일본어",
596
+ languageOption_Chinese: "중국어",
597
+ languageOption_Korean: "한국어",
598
+ languageOption_Auto: "자동",
599
  },
600
  };
601
 
 
903
  label={t("primaryLanguage")}
904
  value={profile.primary_language}
905
  onChange={setProfileValue("primary_language")}
906
+ options={LANGUAGE_OPTIONS.map((value) => ({
907
+ value,
908
+ label: t(`languageOption_${value}`),
909
+ }))}
910
  />
911
  <SelectField
912
  label={t("platform")}