Mercurial Hosting > lang
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
--- 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
--- 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
--- 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
--- 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
--- 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()
--- /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
--- 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');
--- 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