diff --git a/patch-schema/language.sql b/patch-schema/language.sql new file mode 100644 index 000000000..d3440d6e1 --- /dev/null +++ b/patch-schema/language.sql @@ -0,0 +1,6 @@ +BEGIN; + +ALTER TABLE IF EXISTS public.users + ADD COLUMN IF NOT EXISTS language text NOT NULL DEFAULT 'en'; + +END; \ No newline at end of file diff --git a/server/channelserver/handlers.go b/server/channelserver/handlers.go index b1af93beb..462a3318e 100644 --- a/server/channelserver/handlers.go +++ b/server/channelserver/handlers.go @@ -141,6 +141,8 @@ func handleMsgSysLogin(s *Session, p mhfpacket.MHFPacket) { s.charID = pkt.CharID0 s.token = pkt.LoginTokenString s.Unlock() + + s.dict = getLangStrings(s) updateRights(s) bf := byteframe.NewByteFrame() bf.WriteUint32(uint32(Time_Current_Adjusted().Unix())) // Unix timestamp diff --git a/server/channelserver/handlers_cafe.go b/server/channelserver/handlers_cafe.go index d91806a93..e0d967d2a 100644 --- a/server/channelserver/handlers_cafe.go +++ b/server/channelserver/handlers_cafe.go @@ -89,7 +89,8 @@ func handleMsgMhfGetCafeDuration(s *Session, p mhfpacket.MHFPacket) { } bf.WriteUint32(cafeTime) // Total cafe time bf.WriteUint16(0) - ps.Uint16(bf, fmt.Sprintf("Resets on %s %d", cafeReset.Month().String(), cafeReset.Day()), true) + ps.Uint16(bf, fmt.Sprintf(s.dict["cafeReset"], int(cafeReset.Month()), cafeReset.Day()), true) + doAckBufSucceed(s, pkt.AckHandle, bf.Data()) } diff --git a/server/channelserver/handlers_lang.go b/server/channelserver/handlers_lang.go new file mode 100644 index 000000000..5d413ac85 --- /dev/null +++ b/server/channelserver/handlers_lang.go @@ -0,0 +1,21 @@ +package channelserver + +import "go.uber.org/zap" + +func getLangStrings(s *Session) map[string]string { + var lang string + strings := make(map[string]string) + err := s.server.db.QueryRow(`SELECT language FROM users, characters WHERE characters.id = $1 AND users.id = characters.user_id`, s.charID).Scan(&lang) + if err != nil { + s.logger.Warn("No language set for user", zap.Uint32("CID", s.charID)) + } + switch lang { + case "jp": + strings["language"] = "日本語" + strings["cafeReset"] = "%d/%dにリセット" + default: + strings["language"] = "English" + strings["cafeReset"] = "Resets on %d/%d" + } + return strings +} diff --git a/server/channelserver/sys_session.go b/server/channelserver/sys_session.go index 39a96f40f..669f820c1 100644 --- a/server/channelserver/sys_session.go +++ b/server/channelserver/sys_session.go @@ -47,6 +47,8 @@ type Session struct { kqf []byte kqfOverride bool + dict map[string]string + semaphore *Semaphore // Required for the stateful MsgSysUnreserveStage packet. // A stack containing the stage movement history (push on enter/move, pop on back)