Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -396,3 +396,7 @@ NEXT_PUBLIC_SHOW_INTRODUCTION="true"

# チャットログの幅 / Chat log width
NEXT_PUBLIC_CHAT_LOG_WIDTH=400

# 画像表示位置設定(input: 入力エリア, side: サイドエリア) /
# Image display position setting (input: input area, side: side area)
NEXT_PUBLIC_IMAGE_DISPLAY_POSITION="input"
6 changes: 6 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,12 @@ cp .env.example .env # 環境変数を設定
- 既存のディレクトリ構成に従う
- APIクライアントは`app/lib/api/client.ts`に集約すること

### 言語ファイル更新ルール

- **言語ファイルの更新は日本語(`/locales/ja/`)のみ行う**
- 他の言語ファイル(en、ko、zh等)は手動で更新しない
- 翻訳は別途専用のプロセスで管理される

### テスト

- テストは`__tests__`ディレクトリに配置
Expand Down
9 changes: 8 additions & 1 deletion locales/ar/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -321,5 +321,12 @@
"PositionFixed": "قيد التثبيت",
"OpenRouterAPIKeyLabel": "مفتاح API الخاص بـ OpenRouter",
"CharacterPositionInfo": "يمكنك تثبيت موقع واتجاه الشخصية. يتم حفظ موقع الكاميرا في VRM، وموقع النموذج في Live2D.",
"UnfixPosition": "إلغاء التثبيت"
"UnfixPosition": "إلغاء التثبيت",
"ImageDisplayPosition": "موقع عرض الصورة",
"ImageDisplayPositionDescription": "اختر المكان المراد عرض الصور المرفوعة فيه",
"InputArea": "منطقة الإدخال",
"SideArea": "المنطقة الجانبية",
"PasteImageSupported": "يدعم لصق الصور",
"ImageSizeExceeded": "يتجاوز حجم الصورة حد 10 ميجابايت",
"ImageReadError": "فشل في قراءة ملف الصورة"
}
9 changes: 8 additions & 1 deletion locales/de/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -321,5 +321,12 @@
"PositionFixed": "Fixiert",
"OpenRouterAPIKeyLabel": "OpenRouter API-Schlüssel",
"CharacterPositionInfo": "Die Position und Ausrichtung der Charaktere kann fixiert werden. Bei VRM wird die Kameraposition gespeichert, bei Live2D die Modellposition.",
"UnfixPosition": "Fixierung aufheben"
"UnfixPosition": "Fixierung aufheben",
"ImageDisplayPosition": "Bildanzeigeposition",
"ImageDisplayPositionDescription": "Wählen Sie aus, wo hochgeladene Bilder angezeigt werden sollen",
"InputArea": "Eingabebereich",
"SideArea": "Seitenbereich",
"PasteImageSupported": "Bildeinsetzen unterstützt",
"ImageSizeExceeded": "Bildgröße überschreitet 10MB-Grenze",
"ImageReadError": "Fehler beim Lesen der Bilddatei"
}
13 changes: 12 additions & 1 deletion locales/en/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -323,5 +323,16 @@
"DynamicRetrieval": "Dynamic Search",
"OpenRouterModelNameInstruction": "Please enter the model identifier from OpenRouter (e.g., \"openai/gpt-4o\", \"mistralai/mistral-large-latest\"). You can check the model identifier on the OpenRouter model page.",
"DynamicRetrievalThreshold": "Dynamic threshold",
"OpenRouterAPIKeyLabel": "OpenRouter API Key"
"OpenRouterAPIKeyLabel": "OpenRouter API Key",
"ImageDisplayPosition": "Image Display Position",
"ImageDisplayPositionDescription": "Select where to display uploaded images",
"InputArea": "Input Area",
"SideArea": "Side Area",
"PasteImageSupported": "Image paste supported",
"FileSizeError": "File size exceeds the maximum limit of {{maxSize}}MB.",
"FileTypeError": "Unsupported file type. Only image files (PNG, JPEG, GIF, WebP) are allowed.",
"ImageDimensionError": "Image dimensions exceed the maximum size of {{maxWidth}}x{{maxHeight}} pixels.",
"ImageLoadError": "Failed to load the image.",
"FileReadError": "Failed to read the file.",
"FileProcessError": "An error occurred while processing the file."
}
9 changes: 8 additions & 1 deletion locales/es/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -321,5 +321,12 @@
"PositionFixed": "Fijado",
"OpenRouterAPIKeyLabel": "Clave API de OpenRouter",
"CharacterPositionInfo": "Se puede fijar la posición y orientación del personaje. En VRM se guarda la posición de la cámara, en Live2D se guarda la posición del modelo.",
"UnfixPosition": "Desbloquear fijo"
"UnfixPosition": "Desbloquear fijo",
"ImageDisplayPosition": "Posición de visualización de imagen",
"ImageDisplayPositionDescription": "Seleccione dónde mostrar las imágenes subidas",
"InputArea": "Área de entrada",
"SideArea": "Área lateral",
"PasteImageSupported": "Soporte para pegar imágenes",
"ImageSizeExceeded": "El tamaño de la imagen excede el límite de 10MB",
"ImageReadError": "Error al leer el archivo de imagen"
}
9 changes: 8 additions & 1 deletion locales/fr/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -321,5 +321,12 @@
"PositionFixed": "Fixé",
"OpenRouterAPIKeyLabel": "Clé API OpenRouter",
"CharacterPositionInfo": "Vous pouvez fixer la position et l'orientation du personnage. La position de la caméra est enregistrée pour VRM, et la position du modèle pour Live2D.",
"UnfixPosition": "Désactiver la fixation"
"UnfixPosition": "Désactiver la fixation",
"ImageDisplayPosition": "Position d'affichage de l'image",
"ImageDisplayPositionDescription": "Sélectionnez où afficher les images téléchargées",
"InputArea": "Zone de saisie",
"SideArea": "Zone latérale",
"PasteImageSupported": "Collage d'image pris en charge",
"ImageSizeExceeded": "La taille de l'image dépasse la limite de 10 Mo",
"ImageReadError": "Échec de la lecture du fichier image"
}
9 changes: 8 additions & 1 deletion locales/hi/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -320,5 +320,12 @@
"PositionFixed": "फिक्स किया हुआ",
"OpenRouterAPIKeyLabel": "OpenRouter API कुंजी",
"CharacterPositionInfo": "कैरेक्टर की स्थिति और दिशा को स्थिर किया जा सकता है। VRM में कैमरा की स्थिति, Live2D में मॉडल की स्थिति सहेजी जाती है।",
"UnfixPosition": "फिक्स अनलॉक करें"
"UnfixPosition": "फिक्स अनलॉक करें",
"ImageDisplayPosition": "छवि प्रदर्शन स्थिति",
"ImageDisplayPositionDescription": "अपलोड की गई छवियों को कहाँ प्रदर्शित करना है चुनें",
"InputArea": "इनपुट क्षेत्र",
"SideArea": "साइड क्षेत्र",
"PasteImageSupported": "छवि पेस्ट समर्थित",
"ImageSizeExceeded": "छवि का आकार 10MB सीमा से अधिक है",
"ImageReadError": "छवि फ़ाइल पढ़ने में विफल"
}
9 changes: 8 additions & 1 deletion locales/it/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -321,5 +321,12 @@
"PositionFixed": "Bloccato",
"OpenRouterAPIKeyLabel": "Chiave API OpenRouter",
"CharacterPositionInfo": "È possibile fissare la posizione e l'orientamento del personaggio. Per VRM viene salvata la posizione della telecamera, per Live2D viene salvata la posizione del modello.",
"UnfixPosition": "Rimuovi blocco"
"UnfixPosition": "Rimuovi blocco",
"ImageDisplayPosition": "Posizione di visualizzazione immagine",
"ImageDisplayPositionDescription": "Seleziona dove visualizzare le immagini caricate",
"InputArea": "Area di input",
"SideArea": "Area laterale",
"PasteImageSupported": "Supporto incolla immagine",
"ImageSizeExceeded": "La dimensione dell'immagine supera il limite di 10MB",
"ImageReadError": "Errore nella lettura del file immagine"
}
13 changes: 12 additions & 1 deletion locales/ja/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -323,5 +323,16 @@
"CustomAPIDescription": "注意: メッセージは自動的にリクエストボディに含まれます。ストリーミングモードでは、サーバーがtext/event-streamを返す必要があります。",
"XAIAPIKeyLabel": "xAI APIキー",
"OpenRouterAPIKeyLabel": "OpenRouter APIキー",
"OpenRouterModelNameInstruction": "OpenRouterからモデル識別子を入力してください(例: \"openai/gpt-4o\", \"mistralai/mistral-large-latest\")。モデル識別子はOpenRouterモデルページで確認できます。"
"OpenRouterModelNameInstruction": "OpenRouterからモデル識別子を入力してください(例: \"openai/gpt-4o\", \"mistralai/mistral-large-latest\")。モデル識別子はOpenRouterモデルページで確認できます。",
"ImageDisplayPosition": "画像表示位置",
"ImageDisplayPositionDescription": "アップロードした画像を表示する位置を選択してください",
"InputArea": "入力エリア",
"SideArea": "サイドエリア",
"PasteImageSupported": "画像ペースト対応",
"FileSizeError": "ファイルサイズが最大{{maxSize}}MBを超えています。",
"FileTypeError": "サポートされていないファイル形式です。画像ファイル(PNG、JPEG、GIF、WebP)のみアップロード可能です。",
"ImageDimensionError": "画像のサイズが最大{{maxWidth}}x{{maxHeight}}ピクセルを超えています。",
"ImageLoadError": "画像の読み込みに失敗しました。",
"FileReadError": "ファイルの読み込みに失敗しました。",
"FileProcessError": "ファイルの処理中にエラーが発生しました。"
}
9 changes: 8 additions & 1 deletion locales/ko/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -321,5 +321,12 @@
"PositionFixed": "고정 중",
"OpenRouterAPIKeyLabel": "OpenRouter API 키",
"CharacterPositionInfo": "캐릭터의 위치와 방향을 고정할 수 있습니다. VRM은 카메라 위치, Live2D는 모델 위치가 저장됩니다.",
"UnfixPosition": "고정 해제"
"UnfixPosition": "고정 해제",
"ImageDisplayPosition": "이미지 표시 위치",
"ImageDisplayPositionDescription": "업로드된 이미지를 표시할 위치를 선택하세요",
"InputArea": "입력 영역",
"SideArea": "사이드 영역",
"PasteImageSupported": "이미지 붙여넣기 지원",
"ImageSizeExceeded": "이미지 크기가 10MB 제한을 초과합니다",
"ImageReadError": "이미지 파일 읽기에 실패했습니다"
}
9 changes: 8 additions & 1 deletion locales/pl/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -320,5 +320,12 @@
"PositionFixed": "Przytwierdzony",
"OpenRouterAPIKeyLabel": "Klucz API OpenRouter",
"CharacterPositionInfo": "Możesz ustawić stałą pozycję i orientację postaci. Pozycja kamery jest zapisywana dla VRM, a pozycja modelu dla Live2D.",
"UnfixPosition": "Odblokuj przypięcie"
"UnfixPosition": "Odblokuj przypięcie",
"ImageDisplayPosition": "Pozycja wyświetlania obrazu",
"ImageDisplayPositionDescription": "Wybierz gdzie wyświetlać przesłane obrazy",
"InputArea": "Obszar wprowadzania",
"SideArea": "Obszar boczny",
"PasteImageSupported": "Wklejanie obrazów obsługiwane",
"ImageSizeExceeded": "Rozmiar obrazu przekracza limit 10MB",
"ImageReadError": "Nie udało się odczytać pliku obrazu"
}
9 changes: 8 additions & 1 deletion locales/pt/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -321,5 +321,12 @@
"PositionFixed": "Fixando",
"OpenRouterAPIKeyLabel": "Chave API do OpenRouter",
"CharacterPositionInfo": "Você pode fixar a posição e a orientação do personagem. Para VRM, a posição da câmera é salva; para Live2D, a posição do modelo é salva.",
"UnfixPosition": "Desbloquear fixação"
"UnfixPosition": "Desbloquear fixação",
"ImageDisplayPosition": "Posição de exibição da imagem",
"ImageDisplayPositionDescription": "Selecione onde exibir as imagens enviadas",
"InputArea": "Área de entrada",
"SideArea": "Área lateral",
"PasteImageSupported": "Suporte para colar imagem",
"ImageSizeExceeded": "O tamanho da imagem excede o limite de 10MB",
"ImageReadError": "Falha ao ler o arquivo de imagem"
}
9 changes: 8 additions & 1 deletion locales/ru/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -321,5 +321,12 @@
"PositionFixed": "Закреплено",
"OpenRouterAPIKeyLabel": "Ключ API OpenRouter",
"CharacterPositionInfo": "Положение и ориентация персонажа могут быть зафиксированы. Для VRM сохраняется положение камеры, для Live2D — положение модели.",
"UnfixPosition": "Снять закрепление"
"UnfixPosition": "Снять закрепление",
"ImageDisplayPosition": "Позиция отображения изображения",
"ImageDisplayPositionDescription": "Выберите место отображения загруженных изображений",
"InputArea": "Область ввода",
"SideArea": "Боковая область",
"PasteImageSupported": "Поддержка вставки изображений",
"ImageSizeExceeded": "Размер изображения превышает лимит в 10МБ",
"ImageReadError": "Ошибка чтения файла изображения"
}
9 changes: 8 additions & 1 deletion locales/th/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -320,5 +320,12 @@
"PositionFixed": "กำลังล็อกอยู่",
"OpenRouterAPIKeyLabel": "คีย์ API ของ OpenRouter",
"CharacterPositionInfo": "สามารถล็อกตำแหน่งและทิศทางของตัวละครได้ VRM จะบันทึกตำแหน่งกล้อง ส่วน Live2D จะบันทึกตำแหน่งโมเดล",
"UnfixPosition": "ปลดล็อกการตรึง"
"UnfixPosition": "ปลดล็อกการตรึง",
"ImageDisplayPosition": "ตำแหน่งการแสดงภาพ",
"ImageDisplayPositionDescription": "เลือกตำแหน่งที่จะแสดงภาพที่อัปโหลด",
"InputArea": "พื้นที่ป้อนข้อมูล",
"SideArea": "พื้นที่ด้านข้าง",
"PasteImageSupported": "รองรับการวางภาพ",
"ImageSizeExceeded": "ขนาดภาพเกินขีดจำกัด 10MB",
"ImageReadError": "ไม่สามารถอ่านไฟล์ภาพได้"
}
9 changes: 8 additions & 1 deletion locales/vi/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -320,5 +320,12 @@
"PositionFixed": "Đang cố định",
"OpenRouterAPIKeyLabel": "Khóa API OpenRouter",
"CharacterPositionInfo": "Bạn có thể cố định vị trí và hướng của nhân vật. Vị trí camera được lưu cho VRM, vị trí mô hình được lưu cho Live2D.",
"UnfixPosition": "Bỏ cố định"
"UnfixPosition": "Bỏ cố định",
"ImageDisplayPosition": "Vị trí hiển thị hình ảnh",
"ImageDisplayPositionDescription": "Chọn nơi hiển thị hình ảnh đã tải lên",
"InputArea": "Vùng nhập",
"SideArea": "Vùng bên",
"PasteImageSupported": "Hỗ trợ dán hình ảnh",
"ImageSizeExceeded": "Kích thước hình ảnh vượt quá giới hạn 10MB",
"ImageReadError": "Không thể đọc tệp hình ảnh"
}
9 changes: 8 additions & 1 deletion locales/zh/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -321,5 +321,12 @@
"PositionFixed": "固定中",
"OpenRouterAPIKeyLabel": "OpenRouter API密钥",
"CharacterPositionInfo": "可以固定角色的位置和朝向。VRM保存摄像机位置,Live2D保存模型位置。",
"UnfixPosition": "取消固定"
"UnfixPosition": "取消固定",
"ImageDisplayPosition": "图像显示位置",
"ImageDisplayPositionDescription": "选择上传图像的显示位置",
"InputArea": "输入区域",
"SideArea": "侧边区域",
"PasteImageSupported": "支持粘贴图像",
"ImageSizeExceeded": "图像大小超过10MB限制",
"ImageReadError": "读取图像文件失败"
}
Loading
Loading