changeset 16:f5425a3c1898

add languages
author Franklin Schmidt <fschmidt@gmail.com>
date Wed, 30 Jul 2025 10:38:27 -0600
parents 49e9138b5460
children 19901d6fb56f
files src/chat.html.luan src/delete_chat.js.luan src/lib/Chat.luan src/lib/Utils.luan src/lib/ai/claude/Chat.luan src/lib/languages.luan src/site.js src/tts.mp3.luan
diffstat 8 files changed, 61 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
diff -r 49e9138b5460 -r f5425a3c1898 src/chat.html.luan
--- a/src/chat.html.luan	Tue Jul 29 20:59:47 2025 -0600
+++ b/src/chat.html.luan	Wed Jul 30 10:38:27 2025 -0600
@@ -26,6 +26,7 @@
 		chat = Chat.new{
 			user_id = user.id
 			name = "whatever"
+			language = "jp"
 		}
 		chat.save()
 	end
diff -r 49e9138b5460 -r f5425a3c1898 src/delete_chat.js.luan
--- a/src/delete_chat.js.luan	Tue Jul 29 20:59:47 2025 -0600
+++ b/src/delete_chat.js.luan	Wed Jul 30 10:38:27 2025 -0600
@@ -15,6 +15,6 @@
 	chat.delete()
 	Io.stdout = Http.response.text_writer()
 %>
-	location = '/';
+	location = '/list.html';
 <%
 end
diff -r 49e9138b5460 -r f5425a3c1898 src/lib/Chat.luan
--- a/src/lib/Chat.luan	Tue Jul 29 20:59:47 2025 -0600
+++ b/src/lib/Chat.luan	Wed Jul 30 10:38:27 2025 -0600
@@ -10,6 +10,9 @@
 local Db = require "site:/lib/Db.luan"
 local run_in_transaction = Db.run_in_transaction or error()
 local Ai = require "site:/lib/ai/Ai.luan"
+local languages = require "site:/lib/languages.luan"
+local Utils = require "site:/lib/Utils.luan"
+local get_first = Utils.get_first or error()
 
 
 local Chat = {}
@@ -23,6 +26,8 @@
 		name = doc.name
 		ai_name = doc.ai_name
 		ai_thread = doc.ai_thread
+		language = doc.language
+		language_region = doc.language_region
 	}
 end
 
@@ -35,13 +40,20 @@
 		name = chat.name or error()
 		ai_name = chat.ai_name or error()
 		ai_thread = chat.ai_thread -- or error()
+		language = chat.language or error()
+		language_region = chat.language_region or error()
 	}
 end
 
+local function first_region(language)
+	return get_first(languages[language].regions)
+end
+
 function Chat.new(chat)
 	chat.updated = chat.updated or time_now()
 	chat.ai_name = chat.ai_name or "claude"
 	chat.ai = Ai[chat.ai_name]["Chat.luan"] or error()
+	chat.language_region = chat.language_region or first_region(chat.language)
 
 	function chat.save()
 		local doc = to_doc(chat)
@@ -77,7 +89,7 @@
 			chat.ai_thread = ai_thread
 			chat.save()
 		end )
-		return `chat.ai.output_messages_html(ai_thread,old_thread)`
+		return `chat.ai.output_messages_html(chat.language_region,ai_thread,old_thread)`
 	end
 
 	return chat
diff -r 49e9138b5460 -r f5425a3c1898 src/lib/Utils.luan
--- a/src/lib/Utils.luan	Tue Jul 29 20:59:47 2025 -0600
+++ b/src/lib/Utils.luan	Wed Jul 30 10:38:27 2025 -0600
@@ -19,4 +19,8 @@
 	return rtn
 end
 
+function Utils.get_first(t)
+	return pairs(t)()
+end
+
 return Utils
diff -r 49e9138b5460 -r f5425a3c1898 src/lib/ai/claude/Chat.luan
--- a/src/lib/ai/claude/Chat.luan	Tue Jul 29 20:59:47 2025 -0600
+++ b/src/lib/ai/claude/Chat.luan	Wed Jul 30 10:38:27 2025 -0600
@@ -27,7 +27,7 @@
 	%><%=system_prompt%><%
 end
 
-function Chat.output_messages_html(thread,old_thread)
+function Chat.output_messages_html(lang,thread,old_thread)
 	if thread == nil then
 		return
 	end
@@ -56,7 +56,7 @@
 			text = html_encode(text)
 %>
 			<h3><%=who%></h3>
-			<div markdown role="<%=role%>"><%=text%></div>
+			<div markdown role="<%=role%>" lang="<%=lang%>"><%=text%></div>
 <%
 		end
 		local content = message.content or error()
diff -r 49e9138b5460 -r f5425a3c1898 src/lib/languages.luan
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/lib/languages.luan	Wed Jul 30 10:38:27 2025 -0600
@@ -0,0 +1,36 @@
+local Luan = require "luan:Luan.luan"
+local error = Luan.error
+local pairs = Luan.pairs or error()
+local ipairs = Luan.ipairs or error()
+
+
+local regions = {
+	JP = "Japan"
+	US = "United States"
+}
+
+local languages = {
+	en = {
+		name = "English"
+		regions = {"US"}
+	}
+	jp = {
+		name = "Japanese"
+		regions = {"JP"}
+	}
+}
+
+for code, info in pairs(languages) do
+	info.code = code
+	local t = {}
+	for _, region in ipairs(info.regions) do
+		local region_code = code.."-"..region
+		t[region_code] = {
+			code = region_code
+			name = regions[region] or error(region)
+		}
+	end
+	info.regions = t
+end
+
+return languages
diff -r 49e9138b5460 -r f5425a3c1898 src/site.js
--- a/src/site.js	Tue Jul 29 20:59:47 2025 -0600
+++ b/src/site.js	Wed Jul 30 10:38:27 2025 -0600
@@ -138,7 +138,8 @@
 				rt.remove();
 			}
 			//console.log(mdDiv.textContent);
-			text += `\n<p><audio controls preload=none src="/tts.mp3?text=${encodeURIComponent(mdDiv.textContent)}"></p>\n`;
+			let lang = div.getAttribute('lang');
+			text += `\n<p><audio controls preload=none src="/tts.mp3?lang=${lang}&text=${encodeURIComponent(mdDiv.textContent)}"></p>\n`;
 		}
 		div.innerHTML = text;
 		div.removeAttribute('markdown');
diff -r 49e9138b5460 -r f5425a3c1898 src/tts.mp3.luan
--- a/src/tts.mp3.luan	Tue Jul 29 20:59:47 2025 -0600
+++ b/src/tts.mp3.luan	Wed Jul 30 10:38:27 2025 -0600
@@ -33,7 +33,8 @@
 end
 
 return function()
+	local lang = Http.request.parameters.lang or error()
 	local text = Http.request.parameters.text or error()
-	local input = text_to_speech("ja-JP",text)
+	local input = text_to_speech(lang,text)
 	Http.response.binary_writer().write_from(input)
 end