about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--chat.c19
-rw-r--r--command.c18
-rw-r--r--handle.c161
-rw-r--r--input.c2
-rw-r--r--url.c2
5 files changed, 105 insertions, 97 deletions
diff --git a/chat.c b/chat.c
index b74fdc0..1fc3b98 100644
--- a/chat.c
+++ b/chat.c
@@ -74,9 +74,9 @@ static void genCert(const char *path) {
 }
 
 char *idNames[IDCap] = {
-	[None] = "<none>",
-	[Debug] = "<debug>",
-	[Network] = "<network>",
+	[None] = "<ala>",
+	[Debug] = "<pali>",
+	[Network] = "<ma>",
 };
 enum Color idColors[IDCap] = {
 	[None] = Black,
@@ -384,11 +384,18 @@ int main(int argc, char *argv[]) {
 	windowShow(windowFor(Network));
 	uiFormat(
 		Network, Cold, NULL,
-		"\3%dcatgirl\3\tis GPLv3 fwee softwawe ^w^  "
-		"code is avaiwable fwom https://git.causal.agency/catgirl",
+		"jan ale li ken kepeken, li ken lukin, li ken ante e kon pi ilo \3%dMeli Soweli\3 a!",
 		Pink
 	);
-	uiFormat(Network, Cold, NULL, "Traveling...");
+	uiFormat(
+		Network, Cold, NULL,
+		"awen pi ilo ni li lipu GPLv3 ^w^ mu"
+	);
+	uiFormat(
+		Network, Cold, NULL,
+		"sina ken jo e kon pi ilo ni tan lipu https://git.causal.agency/catgirl"
+	);
+	uiFormat(Network, Cold, NULL, "tawa...");
 	uiDraw();
 
 	sandboxEarly(log);
diff --git a/command.c b/command.c
index f404498..f73c213 100644
--- a/command.c
+++ b/command.c
@@ -440,16 +440,16 @@ static void commandFilter(enum Heat heat, uint id, char *params) {
 	if (params) {
 		struct Filter filter = filterAdd(heat, params);
 		uiFormat(
-			id, Cold, NULL, "%sing \3%02d%s %s %s %s",
-			(heat == Hot ? "Highlight" : "Ignor"), Brown, filter.mask,
+			id, Cold, NULL, "%s \3%02d%s %s %s %s",
+			(heat == Hot ? "wile" : "wile ala"), Brown, filter.mask,
 			(filter.cmd ?: ""), (filter.chan ?: ""), (filter.mesg ?: "")
 		);
 	} else {
 		for (size_t i = 0; i < FilterCap && filters[i].mask; ++i) {
 			if (filters[i].heat != heat) continue;
 			uiFormat(
-				Network, Warm, NULL, "%sing \3%02d%s %s %s %s",
-				(heat == Hot ? "Highlight" : "Ignor"), Brown, filters[i].mask,
+				Network, Warm, NULL, "%s \3%02d%s %s %s %s",
+				(heat == Hot ? "wile" : "wile ala"), Brown, filters[i].mask,
 				(filters[i].cmd ?: ""), (filters[i].chan ?: ""),
 				(filters[i].mesg ?: "")
 			);
@@ -462,8 +462,8 @@ static void commandUnfilter(enum Heat heat, uint id, char *params) {
 	struct Filter filter = filterParse(heat, params);
 	bool found = filterRemove(filter);
 	uiFormat(
-		id, Cold, NULL, "%s %sing \3%02d%s %s %s %s",
-		(found ? "No longer" : "Not"), (heat == Hot ? "highlight" : "ignor"),
+		id, Cold, NULL, "%s %s \3%02d%s %s %s %s",
+		(found ? "pini" : "sina lon ala"), (heat == Hot ? "lukin" : "lukin ala"),
 		Brown, filter.mask, (filter.cmd ?: ""), (filter.chan ?: ""),
 		(filter.mesg ?: "")
 	);
@@ -509,7 +509,7 @@ static void commandHelp(uint id, char *params) {
 		return;
 	}
 	if (self.restricted) {
-		uiFormat(id, Warm, NULL, "See catgirl(1) or /help index");
+		uiFormat(id, Warm, NULL, "o lukin e lipu catgirl(1) anu o toki e ni: /help index");
 		return;
 	}
 
@@ -674,11 +674,11 @@ void command(uint id, char *input) {
 		cmd, Commands, ARRAY_LEN(Commands), sizeof(*handler), compar
 	);
 	if (!handler) {
-		uiFormat(id, Warm, NULL, "No such command %s", cmd);
+		uiFormat(id, Warm, NULL, "mi sona ala e toki ilo '%s'", cmd);
 		return;
 	}
 	if (!commandAvailable(handler)) {
-		uiFormat(id, Warm, NULL, "Command %s is unavailable", cmd);
+		uiFormat(id, Warm, NULL, "sina ken ala kepeken toki ilo '%s'", cmd);
 		return;
 	}
 
diff --git a/handle.c b/handle.c
index 388a122..cb52ba6 100644
--- a/handle.c
+++ b/handle.c
@@ -83,7 +83,7 @@ static void require(struct Message *msg, bool origin, uint len) {
 	}
 	for (uint i = 0; i < len; ++i) {
 		if (msg->params[i]) continue;
-		errx(EX_PROTOCOL, "%s missing parameter %u", msg->cmd, 1 + i);
+		errx(EX_PROTOCOL, "%s li wile e nimi '%u'", msg->cmd, 1 + i);
 	}
 }
 
@@ -170,7 +170,7 @@ static void handleCap(struct Message *msg) {
 		}
 		if (!(self.caps & CapSASL)) ircFormat("CAP END\r\n");
 	} else if (!strcmp(msg->params[1], "NAK")) {
-		errx(EX_CONFIG, "server does not support %s", msg->params[2]);
+		errx(EX_CONFIG, "kulupu li wile ala e %s", msg->params[2]);
 	}
 }
 
@@ -214,7 +214,7 @@ static void handleAuthenticate(struct Message *msg) {
 	size_t userLen = strlen(self.plainUser);
 	size_t passLen = strlen(self.plainPass);
 	size_t len = 1 + userLen + 1 + passLen;
-	if (sizeof(buf) < len) errx(EX_USAGE, "SASL PLAIN is too long");
+	if (sizeof(buf) < len) errx(EX_USAGE, "open nasin SASL PLAIN li mute ike");
 	memcpy(&buf[1], self.plainUser, userLen);
 	memcpy(&buf[1 + userLen + 1], self.plainPass, passLen);
 
@@ -266,7 +266,7 @@ static void handleReplyISupport(struct Message *msg) {
 			set(&network.name, msg->params[i]);
 			uiFormat(
 				Network, Cold, tagTime(msg),
-				"You arrive in %s", msg->params[i]
+				"sina kama lon ma %s", msg->params[i]
 			);
 		} else if (!strcmp(key, "USERLEN")) {
 			if (!msg->params[i]) continue;
@@ -285,7 +285,7 @@ static void handleReplyISupport(struct Message *msg) {
 			char *modes = strsep(&msg->params[i], ")");
 			char *prefixes = msg->params[i];
 			if (!modes || !prefixes || strlen(modes) != strlen(prefixes)) {
-				errx(EX_PROTOCOL, "invalid PREFIX value");
+				errx(EX_PROTOCOL, "nimi PREFIX li jo ala e nimi ike");
 			}
 			set(&network.prefixModes, modes);
 			set(&network.prefixes, prefixes);
@@ -295,7 +295,7 @@ static void handleReplyISupport(struct Message *msg) {
 			char *setParam = strsep(&msg->params[i], ",");
 			char *channel = strsep(&msg->params[i], ",");
 			if (!list || !param || !setParam || !channel) {
-				errx(EX_PROTOCOL, "invalid CHANMODES value");
+				errx(EX_PROTOCOL, "nimi CHANMODES li jo e nimi ike");
 			}
 			set(&network.listModes, list);
 			set(&network.paramModes, param);
@@ -354,7 +354,7 @@ static void handleJoin(struct Message *msg) {
 	}
 	uiFormat(
 		id, filterCheck(Cold, id, msg), tagTime(msg),
-		"\3%02d%s\3\t%s%s%sarrives in \3%02d%s\3",
+		"jan \3%02d%s\3\t%s%s%sli kama lon tomo \3%02d%s\3",
 		hash(msg->user), msg->nick,
 		(msg->params[2] ? "(" : ""),
 		(msg->params[2] ?: ""),
@@ -387,7 +387,7 @@ static void handlePart(struct Message *msg) {
 	if (heat > Ice) urlScan(id, msg->nick, msg->params[1]);
 	uiFormat(
 		id, heat, tagTime(msg),
-		"\3%02d%s\3\tleaves \3%02d%s\3%s%s",
+		"jan \3%02d%s\3\tli weka lon tomo \3%02d%s\3%s%s",
 		hash(msg->user), msg->nick, hash(msg->params[0]), msg->params[0],
 		(msg->params[1] ? ": " : ""), (msg->params[1] ?: "")
 	);
@@ -406,7 +406,7 @@ static void handleKick(struct Message *msg) {
 	urlScan(id, msg->nick, msg->params[2]);
 	uiFormat(
 		id, (kicked ? Hot : Cold), tagTime(msg),
-		"%s\3%02d%s\17\tkicks \3%02d%s\3 out of \3%02d%s\3%s%s",
+		"jan %s\3%02d%s\17\tli weka e \3%02d%s\3 tan tomo \3%02d%s\3%s%s",
 		(kicked ? "\26" : ""),
 		hash(msg->user), msg->nick,
 		completeColor(id, msg->params[1]), msg->params[1],
@@ -434,7 +434,7 @@ static void handleNick(struct Message *msg) {
 		}
 		uiFormat(
 			id, filterCheck(Cold, id, msg), tagTime(msg),
-			"\3%02d%s\3\tis now known as \3%02d%s\3",
+			"jan \3%02d%s\3\tli kama jan \3%02d%s\3",
 			hash(msg->user), msg->nick, hash(msg->user), msg->params[0]
 		);
 		if (id == Network) continue;
@@ -451,9 +451,8 @@ static void handleSetname(struct Message *msg) {
 	for (uint id; (id = completeID(msg->nick));) {
 		uiFormat(
 			id, filterCheck(Cold, id, msg), tagTime(msg),
-			"\3%02d%s\3\tis now known as \3%02d%s\3 (%s\17)",
-			hash(msg->user), msg->nick, hash(msg->user), msg->nick,
-			msg->params[0]
+			"nimi pi jan \3%02d%s\3\tli kama nimi \"%s\17\"",
+			hash(msg->user), msg->nick, msg->params[0]
 		);
 	}
 }
@@ -465,7 +464,7 @@ static void handleQuit(struct Message *msg) {
 		if (heat > Ice) urlScan(id, msg->nick, msg->params[0]);
 		uiFormat(
 			id, heat, tagTime(msg),
-			"\3%02d%s\3\tleaves%s%s",
+			"jan \3%02d%s\3\tli weka tan kulupu%s%s",
 			hash(msg->user), msg->nick,
 			(msg->params[0] ? ": " : ""), (msg->params[0] ?: "")
 		);
@@ -485,14 +484,14 @@ static void handleInvite(struct Message *msg) {
 		set(&self.invited, msg->params[1]);
 		uiFormat(
 			Network, filterCheck(Hot, Network, msg), tagTime(msg),
-			"\3%02d%s\3\tinvites you to \3%02d%s\3",
+			"jan \3%02d%s\3\tli wile e lon sina pi tomo \3%02d%s\3",
 			hash(msg->user), msg->nick, hash(msg->params[1]), msg->params[1]
 		);
 	} else {
 		uint id = idFor(msg->params[1]);
 		uiFormat(
 			id, Cold, tagTime(msg),
-			"\3%02d%s\3\tinvites %s to \3%02d%s\3",
+			"jan \3%02d%s\3\tli wile e lon jan %s pi tomo \3%02d%s\3",
 			hash(msg->user), msg->nick,
 			msg->params[0],
 			hash(msg->params[1]), msg->params[1]
@@ -521,7 +520,7 @@ static void handleErrorUserOnChannel(struct Message *msg) {
 	uint id = idFor(msg->params[2]);
 	uiFormat(
 		id, Warm, tagTime(msg),
-		"\3%02d%s\3 is already in \3%02d%s\3",
+		"jan \3%02d%s\3 li lon tomo \3%02d%s\3",
 		completeColor(id, msg->params[1]), msg->params[1],
 		hash(msg->params[2]), msg->params[2]
 	);
@@ -547,7 +546,7 @@ static void handleReplyNames(struct Message *msg) {
 	if (ptr == buf) return;
 	uiFormat(
 		id, (replies[ReplyNamesAuto] ? Cold : Warm), tagTime(msg),
-		"In \3%02d%s\3 are %s",
+		"jan lon pi tomo \3%02d%s\3: %s",
 		hash(msg->params[2]), msg->params[2], buf
 	);
 }
@@ -574,7 +573,7 @@ static void handleReplyWho(struct Message *msg) {
 	require(msg, false, 7);
 	if (who.ptr == who.buf) {
 		who.ptr = seprintf(
-			who.ptr, who.end, "The council of \3%02d%s\3 are ",
+			who.ptr, who.end, "jan lawa lon pi tomo \3%02d%s\3: ",
 			hash(msg->params[1]), msg->params[1]
 		);
 	}
@@ -586,7 +585,7 @@ static void handleReplyWho(struct Message *msg) {
 		who.ptr, who.end, "%s\3%02d%s%s\3%s",
 		(who.ptr[-1] == ' ' ? "" : ", "),
 		hash(msg->params[2]), prefixes, msg->params[5],
-		(msg->params[6][0] == 'H' ? "" : " (away)")
+		(msg->params[6][0] == 'H' ? "" : " (weka)")
 	);
 }
 
@@ -600,7 +599,7 @@ static void handleReplyNoTopic(struct Message *msg) {
 	require(msg, false, 2);
 	uiFormat(
 		idFor(msg->params[1]), Warm, tagTime(msg),
-		"There is no sign in \3%02d%s\3",
+		"tomo \3%02d%s\3 li jo ala e sitelen tomo",
 		hash(msg->params[1]), msg->params[1]
 	);
 }
@@ -626,7 +625,7 @@ static void handleReplyTopic(struct Message *msg) {
 	urlScan(id, NULL, msg->params[2]);
 	uiFormat(
 		id, (replies[ReplyTopicAuto] ? Cold : Warm), tagTime(msg),
-		"The sign in \3%02d%s\3 reads: %s",
+		"sitelen pi tomo \3%02d%s\3 li toki e ni: %s",
 		hash(msg->params[1]), msg->params[1], msg->params[2]
 	);
 	logFormat(
@@ -653,7 +652,7 @@ static void handleTopic(struct Message *msg) {
 		topicComplete(id, NULL);
 		uiFormat(
 			id, Warm, tagTime(msg),
-			"\3%02d%s\3\tremoves the sign in \3%02d%s\3",
+			"jan \3%02d%s\3\tli weka e sitelen pi tomo \3%02d%s\3",
 			hash(msg->user), msg->nick, hash(msg->params[0]), msg->params[0]
 		);
 		logFormat(
@@ -709,7 +708,7 @@ plain:
 	urlScan(id, msg->nick, msg->params[1]);
 	uiFormat(
 		id, Warm, tagTime(msg),
-		"\3%02d%s\3\tplaces a new sign in \3%02d%s\3: %s",
+		"jan \3%02d%s\3\tli pana e sitelen pi tomo \3%02d%s\3: %s",
 		hash(msg->user), msg->nick, hash(msg->params[0]), msg->params[0],
 		(ptr > buf ? buf : msg->params[1])
 	);
@@ -720,11 +719,11 @@ plain:
 }
 
 static const char *UserModes[256] = {
-	['O'] = "local oper",
-	['i'] = "invisible",
-	['o'] = "oper",
-	['r'] = "registered",
-	['w'] = "wallops",
+	['O'] = "jan pi kulupu lawa",
+	['i'] = "sina taso lon tomo pi jan ni, la sina ken lukin e jan ni",
+	['o'] = "jan pi kulupu lawa",
+	['r'] = "ilo lawa ma li sona jan ni",
+	['w'] = "jan li wile ala e toki pi kulupu lawa",
 };
 
 static void handleReplyUserModeIs(struct Message *msg) {
@@ -740,23 +739,24 @@ static void handleReplyUserModeIs(struct Message *msg) {
 	}
 	uiFormat(
 		Network, Warm, tagTime(msg),
-		"\3%02d%s\3\tis %s",
-		self.color, self.nick, (ptr > buf ? &buf[2] : "modeless")
+		"jan \3%02d%s\3\tli jo e kule ni: %s",
+		self.color, self.nick, (ptr > buf ? &buf[2] : "ala")
 	);
 }
 
 static const char *ChanModes[256] = {
-	['a'] = "protected",
+	['a'] = "awen e jan ni",
 	['h'] = "halfop",
-	['i'] = "invite-only",
-	['k'] = "key",
-	['l'] = "client limit",
-	['m'] = "moderated",
-	['n'] = "no external messages",
+	['i'] = "wile tomo taso",
+	['k'] = "wile nimi open",
+	['l'] = "tomo li ken taso poki e nanpa pi jan ni",
+	['m'] = "jan lawa taso li ken toki",
+	['n'] = "toki ala tan jan lon ala",
 	['o'] = "operator",
 	['q'] = "founder",
-	['s'] = "secret",
-	['t'] = "protected topic",
+	['r'] = "ilo lawa ma li sona tomo ni",
+	['s'] = "jan lon ala li lukin ala e tomo",
+	['t'] = "jan lawa taso li ken ante e sitelen tomo",
 	['v'] = "voice",
 };
 
@@ -774,7 +774,7 @@ static void handleReplyChannelModeIs(struct Message *msg) {
 		) {
 			assert(param < ParamCap);
 			ptr = seprintf(
-				ptr, end, ", +%c%s%s %s",
+				ptr, end, ", +%c%s%s (%s)",
 				*ch, (name ? " " : ""), (name ?: ""),
 				msg->params[param++]
 			);
@@ -787,9 +787,9 @@ static void handleReplyChannelModeIs(struct Message *msg) {
 	}
 	uiFormat(
 		idFor(msg->params[1]), Warm, tagTime(msg),
-		"\3%02d%s\3\tis %s",
+		"tomo \3%02d%s\3\tli jo e kule ni: %s",
 		hash(msg->params[1]), msg->params[1],
-		(ptr > buf ? &buf[2] : "modeless")
+		(ptr > buf ? &buf[2] : "ala")
 	);
 }
 
@@ -804,11 +804,11 @@ static void handleMode(struct Message *msg) {
 			const char *name = UserModes[(byte)*ch];
 			uiFormat(
 				Network, Warm, tagTime(msg),
-				"\3%02d%s\3\t%ssets \3%02d%s\3 %c%c%s%s",
+				"jan \3%02d%s\3\tli %s e kule %c%c%s%s%s tawa \3%02d%s\3",
 				hash(msg->user), msg->nick,
-				(set ? "" : "un"),
-				self.color, msg->params[0],
-				set["-+"], *ch, (name ? " " : ""), (name ?: "")
+				(set ? "pana" : "weka"),
+				set["-+"], *ch, (name ? " (" : ""), (name ?: ""), (name ? ")": ""),
+				self.color, msg->params[0]
 			);
 		}
 		return;
@@ -823,8 +823,8 @@ static void handleMode(struct Message *msg) {
 
 		const char *verb = (set ? "sets" : "unsets");
 		const char *name = ChanModes[(byte)*ch];
-		if (*ch == network.excepts) name = "except";
-		if (*ch == network.invex) name = "invite";
+		if (*ch == network.excepts) name = "awen";
+		if (*ch == network.invex) name = "wile";
 		const char *mode = (const char[]) {
 			set["-+"], *ch, (name ? ' ' : '\0'), '\0'
 		};
@@ -840,7 +840,7 @@ static void handleMode(struct Message *msg) {
 			];
 			uiFormat(
 				id, Cold, tagTime(msg),
-				"\3%02d%s\3\t%s \3%02d%c%s\3 %s%s in \3%02d%s\3",
+				"FIXME \3%02d%s\3\t%s \3%02d%c%s\3 %s%s in \3%02d%s\3",
 				hash(msg->user), msg->nick, verb,
 				completeColor(id, nick), prefix, nick,
 				mode, name, hash(msg->params[0]), msg->params[0]
@@ -860,7 +860,7 @@ static void handleMode(struct Message *msg) {
 				verb = (set ? "bans" : "unbans");
 				uiFormat(
 					id, Cold, tagTime(msg),
-					"\3%02d%s\3\t%s %c%c %s from \3%02d%s\3",
+					"FIXME \3%02d%s\3\t%s %c%c %s from \3%02d%s\3",
 					hash(msg->user), msg->nick, verb, set["-+"], *ch, mask,
 					hash(msg->params[0]), msg->params[0]
 				);
@@ -873,7 +873,7 @@ static void handleMode(struct Message *msg) {
 				const char *to = (set ? "to" : "from");
 				uiFormat(
 					id, Cold, tagTime(msg),
-					"\3%02d%s\3\t%s %s %s the \3%02d%s\3 %s%s list",
+					"FIXME \3%02d%s\3\t%s %s %s the \3%02d%s\3 %s%s list",
 					hash(msg->user), msg->nick, verb, mask, to,
 					hash(msg->params[0]), msg->params[0], mode, name
 				);
@@ -891,7 +891,7 @@ static void handleMode(struct Message *msg) {
 			char *param = msg->params[i++];
 			uiFormat(
 				id, Cold, tagTime(msg),
-				"\3%02d%s\3\t%s \3%02d%s\3 %s%s %s",
+				"FIXME \3%02d%s\3\t%s \3%02d%s\3 %s%s %s",
 				hash(msg->user), msg->nick, verb,
 				hash(msg->params[0]), msg->params[0], mode, name, param
 			);
@@ -908,7 +908,7 @@ static void handleMode(struct Message *msg) {
 			char *param = msg->params[i++];
 			uiFormat(
 				id, Cold, tagTime(msg),
-				"\3%02d%s\3\t%s \3%02d%s\3 %s%s %s",
+				"FIXME \3%02d%s\3\t%s \3%02d%s\3 %s%s %s",
 				hash(msg->user), msg->nick, verb,
 				hash(msg->params[0]), msg->params[0], mode, name, param
 			);
@@ -932,7 +932,7 @@ static void handleMode(struct Message *msg) {
 		if (strchr(network.channelModes, *ch)) {
 			uiFormat(
 				id, Cold, tagTime(msg),
-				"\3%02d%s\3\t%s \3%02d%s\3 %s%s",
+				"FIXME \3%02d%s\3\t%s \3%02d%s\3 %s%s",
 				hash(msg->user), msg->nick, verb,
 				hash(msg->params[0]), msg->params[0], mode, name
 			);
@@ -956,7 +956,7 @@ static void handleErrorUserNotInChannel(struct Message *msg) {
 	require(msg, false, 4);
 	uiFormat(
 		idFor(msg->params[2]), Warm, tagTime(msg),
-		"%s\tis not in \3%02d%s\3",
+		"%s\tli lon ala tomo \3%02d%s\3",
 		msg->params[1], hash(msg->params[2]), msg->params[2]
 	);
 }
@@ -978,7 +978,7 @@ static void handleReplyBanList(struct Message *msg) {
 		strftime(since, sizeof(since), "%F %T", localtime(&time));
 		uiFormat(
 			id, Warm, tagTime(msg),
-			"Banned from \3%02d%s\3 since %s by \3%02d%s\3: %s",
+			"tomo \3%02d%s\3 li jo ala (tan tenpo %s, tan anu pi lawa \3%02d%s\3) e ike: %s",
 			hash(msg->params[1]), msg->params[1],
 			since, completeColor(id, msg->params[3]), msg->params[3],
 			msg->params[2]
@@ -986,7 +986,7 @@ static void handleReplyBanList(struct Message *msg) {
 	} else {
 		uiFormat(
 			id, Warm, tagTime(msg),
-			"Banned from \3%02d%s\3: %s",
+			"awen weka e tawa tomo \3%02d%s\3: %s",
 			hash(msg->params[1]), msg->params[1], msg->params[2]
 		);
 	}
@@ -1001,33 +1001,33 @@ static void onList(const char *list, struct Message *msg) {
 		strftime(since, sizeof(since), "%F %T", localtime(&time));
 		uiFormat(
 			id, Warm, tagTime(msg),
-			"On the \3%02d%s\3 %s list since %s by \3%02d%s\3: %s",
-			hash(msg->params[1]), msg->params[1], list,
+			"lipu %s pi tomo \3%02d%s\3 li jo e ni, tan tenpo %s, tan anu pi lawa \3%02d%s\3: %s",
+			list, hash(msg->params[1]), msg->params[1],
 			since, completeColor(id, msg->params[3]), msg->params[3],
 			msg->params[2]
 		);
 	} else {
 		uiFormat(
 			id, Warm, tagTime(msg),
-			"On the \3%02d%s\3 %s list: %s",
-			hash(msg->params[1]), msg->params[1], list, msg->params[2]
+			"lipu %s pi tomo \3%02d%s\3 li jo e ni: %s",
+			list, hash(msg->params[1]), msg->params[1], msg->params[2]
 		);
 	}
 }
 
 static void handleReplyExceptList(struct Message *msg) {
-	onList("except", msg);
+	onList("awen", msg);
 }
 
 static void handleReplyInviteList(struct Message *msg) {
-	onList("invite", msg);
+	onList("wile", msg);
 }
 
 static void handleReplyList(struct Message *msg) {
 	require(msg, false, 4);
 	uiFormat(
 		Network, Warm, tagTime(msg),
-		"In \3%02d%s\3 are %ld under the banner: %s",
+		"tomo \3%02d%s\3 li jo e jan %ld. sitelen tomo li toki e ni: %s",
 		hash(msg->params[1]), msg->params[1],
 		strtol(msg->params[2], NULL, 10),
 		msg->params[3]
@@ -1039,7 +1039,7 @@ static void handleReplyWhoisUser(struct Message *msg) {
 	completeTouch(Network, msg->params[1], hash(msg->params[2]));
 	uiFormat(
 		Network, Warm, tagTime(msg),
-		"\3%02d%s\3\tis %s!%s@%s (%s\17)",
+		"jan \3%02d%s\3\tli jan %s!%s@%s (%s\17)",
 		hash(msg->params[2]), msg->params[1],
 		msg->params[1], msg->params[2], msg->params[3], msg->params[5]
 	);
@@ -1050,22 +1050,22 @@ static void handleReplyWhoisServer(struct Message *msg) {
 	require(msg, false, 4);
 	uiFormat(
 		Network, Warm, tagTime(msg),
-		"\3%02d%s\3\t%s connected to %s (%s)",
+		"jan \3%02d%s\3\tli lon %stan kulupu %s (%s)",
 		completeColor(Network, msg->params[1]), msg->params[1],
-		(replies[ReplyWhowas] ? "was" : "is"), msg->params[2], msg->params[3]
+		(replies[ReplyWhowas] ? "ala " : ""), msg->params[2], msg->params[3]
 	);
 }
 
 static void handleReplyWhoisIdle(struct Message *msg) {
 	require(msg, false, 3);
 	unsigned long idle = strtoul(msg->params[2], NULL, 10);
-	const char *unit = "second";
+	const char *unit = "ilo lili";
 	if (idle / 60) {
-		idle /= 60; unit = "minute";
+		idle /= 60; unit = "ilo";
 		if (idle / 60) {
-			idle /= 60; unit = "hour";
+			idle /= 60; unit = "ilo suli";
 			if (idle / 24) {
-				idle /= 24; unit = "day";
+				idle /= 24; unit = "suno";
 			}
 		}
 	}
@@ -1074,10 +1074,10 @@ static void handleReplyWhoisIdle(struct Message *msg) {
 	strftime(signon, sizeof(signon), "%F %T", localtime(&time));
 	uiFormat(
 		Network, Warm, tagTime(msg),
-		"\3%02d%s\3\tis idle for %lu %s%s%s%s",
+		"jan \3%02d%s\3\tli awen lape lon tenpo %s %lu%s%s",
 		completeColor(Network, msg->params[1]), msg->params[1],
-		idle, unit, (idle != 1 ? "s" : ""),
-		(msg->params[3] ? ", signed on " : ""), (msg->params[3] ? signon : "")
+		unit, idle,
+		(msg->params[3] ? ", tan tenpo " : ""), (msg->params[3] ? signon : "")
 	);
 }
 
@@ -1091,12 +1091,12 @@ static void handleReplyWhoisChannels(struct Message *msg) {
 		char *name = &channel[strspn(channel, network.prefixes)];
 		ptr = seprintf(
 			ptr, end, "%s\3%02d%s\3",
-			(ptr > buf ? ", " : ""), hash(name), channel
+			(ptr > buf ? ", tomo " : ""), hash(name), channel
 		);
 	}
 	uiFormat(
 		Network, Warm, tagTime(msg),
-		"\3%02d%s\3\tis in %s",
+		"jan \3%02d%s\3\tli lon tomo %s",
 		completeColor(Network, msg->params[1]), msg->params[1], buf
 	);
 }
@@ -1110,7 +1110,7 @@ static void handleReplyWhoisGeneric(struct Message *msg) {
 	}
 	uiFormat(
 		Network, Warm, tagTime(msg),
-		"\3%02d%s\3\t%s%s%s",
+		"jan \3%02d%s\3\t%s%s%s",
 		completeColor(Network, msg->params[1]), msg->params[1],
 		msg->params[2], (msg->params[3] ? " " : ""), (msg->params[3] ?: "")
 	);
@@ -1128,7 +1128,7 @@ static void handleReplyWhowasUser(struct Message *msg) {
 	completeTouch(Network, msg->params[1], hash(msg->params[2]));
 	uiFormat(
 		Network, Warm, tagTime(msg),
-		"\3%02d%s\3\twas %s!%s@%s (%s)",
+		"tenpo pini la, jan \3%02d%s\3\tli jan %s!%s@%s (%s)",
 		hash(msg->params[2]), msg->params[1],
 		msg->params[1], msg->params[2], msg->params[3], msg->params[5]
 	);
@@ -1152,7 +1152,7 @@ static void handleReplyAway(struct Message *msg) {
 	}
 	uiFormat(
 		id, (id == Network ? Warm : Cold), tagTime(msg),
-		"\3%02d%s\3\tis away: %s",
+		"jan \3%02d%s\3\tli weka tan ni: %s",
 		completeColor(id, msg->params[1]), msg->params[1], msg->params[2]
 	);
 	logFormat(
@@ -1277,7 +1277,8 @@ static void handlePrivmsg(struct Message *msg) {
 		colorMentions(buf, sizeof(buf), id, msg);
 		uiFormat(
 			id, heat, tagTime(msg),
-			"%s\35\3%d* %s\17\35\t%s%s",
+			"%s\35\3%d*\17\35 jan %s\3%d%s\17\35\t%s%s",
+			(highlight ? "\26" : ""), hash(msg->user),
 			(highlight ? "\26" : ""), hash(msg->user), msg->nick,
 			buf, msg->params[1]
 		);
diff --git a/input.c b/input.c
index f3813c4..d7b1e85 100644
--- a/input.c
+++ b/input.c
@@ -193,7 +193,7 @@ void inputUpdate(void) {
 		styleInput.fg = LightGray;
 		skip = notice;
 	} else if (action) {
-		prefix = "* "; suffix = " ";
+		prefix = "* jan "; suffix = " ";
 		stylePrompt.attr |= Italic;
 		styleInput.attr |= Italic;
 		skip = action;
diff --git a/url.c b/url.c
index 219a83c..84fe0fe 100644
--- a/url.c
+++ b/url.c
@@ -143,7 +143,7 @@ static void urlOpen(const char *url) {
 			_exit(EX_CONFIG);
 		}
 	}
-	warnx("no open utility found");
+	warnx("mi ken ala alasa e ilo pi open lipu");
 	_exit(EX_CONFIG);
 }