콘텐츠 메시지 다국어 처리

This commit is contained in:
2025-12-23 19:03:38 +09:00
parent 9d619450ef
commit e987a56544
10 changed files with 303 additions and 76 deletions

View File

@@ -47,6 +47,177 @@ class SodaMessageSource {
)
)
private val contentErrorMessages = mapOf(
"content.error.invalid_content_retry" to mapOf(
Lang.KO to "잘못된 콘텐츠 입니다.\n다시 시도해 주세요.",
Lang.EN to "Invalid content.\nPlease try again.",
Lang.JA to "不正なコンテンツです。\nもう一度お試しください。"
),
"content.error.cover_image_required" to mapOf(
Lang.KO to "커버이미지를 선택해 주세요.",
Lang.EN to "Please select a cover image.",
Lang.JA to "カバー画像を選択してください。"
),
"content.error.content_required" to mapOf(
Lang.KO to "콘텐츠를 선택해 주세요.",
Lang.EN to "Please select content.",
Lang.JA to "コンテンツを選択してください。"
),
"content.error.invalid_theme" to mapOf(
Lang.KO to "잘못된 테마입니다. 다시 선택해 주세요.",
Lang.EN to "Invalid theme. Please select again.",
Lang.JA to "不正なテーマです。もう一度選択してください。"
),
"content.error.alarm_theme_price_min" to mapOf(
Lang.KO to "알람, 모닝콜, 슬립콜 테마의 콘텐츠는 5캔 이상의 유료콘텐츠로 등록이 가능합니다.",
Lang.EN to "Alarm, Morning Call, and Sleep Call themes require paid content of at least 5 cans.",
Lang.JA to "アラーム、モーニングコール、スリープコールのテーマは5缶以上の有料コンテンツのみ登録できます。"
),
"content.error.minimum_price" to mapOf(
Lang.KO to "콘텐츠의 최소금액은 5캔 입니다.",
Lang.EN to "The minimum price for content is 5 cans.",
Lang.JA to "コンテンツの最低価格は5缶です。"
),
"content.error.preview_time_format" to mapOf(
Lang.KO to "미리 듣기 시간 형식은 00:30:00 과 같아야 합니다",
Lang.EN to "Preview time format must be like 00:30:00.",
Lang.JA to "プレビュー時間の形式は00:30:00のようにする必要があります。"
),
"content.error.preview_time_minimum" to mapOf(
Lang.KO to "미리 듣기의 최소 시간은 15초 입니다.",
Lang.EN to "The minimum preview time is 15 seconds.",
Lang.JA to "プレビューの最小時間は15秒です。"
),
"content.error.preview_time_both_required" to mapOf(
Lang.KO to "미리 듣기 시작 시간과 종료 시간 둘 다 입력을 하거나 둘 다 입력 하지 않아야 합니다.",
Lang.EN to "You must enter both preview start and end times, or neither.",
Lang.JA to "プレビューの開始時間と終了時間は両方入力するか、両方入力しないでください。"
),
"content.error.user_not_found" to mapOf(
Lang.KO to "없는 사용자 입니다.",
Lang.EN to "User not found.",
Lang.JA to "ユーザーが見つかりません。"
),
"content.error.access_restricted_by_creator" to mapOf(
Lang.KO to "%s님의 요청으로 콘텐츠 접근이 제한됩니다.",
Lang.EN to "Access to content is restricted at %s's request.",
Lang.JA to "%sさんの要請によりコンテンツへのアクセスが制限されています。"
),
"content.error.pin_available_after_open" to mapOf(
Lang.KO to "콘텐츠 오픈 후 채널에 고정이 가능합니다.",
Lang.EN to "You can pin it to the channel after the content is opened.",
Lang.JA to "コンテンツ公開後にチャンネルへ固定できます。"
)
)
private val contentNotificationMessages = mapOf(
"content.notification.upload_complete_title" to mapOf(
Lang.KO to "콘텐츠 등록완료",
Lang.EN to "Content registration complete",
Lang.JA to "コンテンツ登録完了"
),
"content.notification.uploaded_message" to mapOf(
Lang.KO to "콘텐츠를 업로드 하였습니다. - %s",
Lang.EN to "Content uploaded. - %s",
Lang.JA to "コンテンツをアップロードしました。- %s"
)
)
private val contentFormatMessages = mapOf(
"content.release_date.format" to mapOf(
Lang.KO to "yyyy년 MM월 dd일 HH시 mm분 오픈예정",
Lang.EN to "MMM dd, yyyy HH:mm 'Opens soon'",
Lang.JA to "yyyy年 MM月 dd日 HH時 mm分 公開予定"
),
"content.ranking.date.start_format" to mapOf(
Lang.KO to "yyyy년 MM월 dd일",
Lang.EN to "MMM dd, yyyy",
Lang.JA to "yyyy年 MM月 dd日"
),
"content.ranking.date.end_format" to mapOf(
Lang.KO to "MM월 dd일",
Lang.EN to "MMM dd",
Lang.JA to "MM月 dd日"
)
)
private val contentRankingMessages = mapOf(
"content.ranking.sort_type.sales" to mapOf(
Lang.KO to "매출",
Lang.EN to "Sales",
Lang.JA to "売上"
),
"content.ranking.sort_type.comment" to mapOf(
Lang.KO to "댓글",
Lang.EN to "Comments",
Lang.JA to "コメント"
),
"content.ranking.sort_type.like" to mapOf(
Lang.KO to "좋아요",
Lang.EN to "Likes",
Lang.JA to "いいね"
),
"content.ranking.sort_type.donation" to mapOf(
Lang.KO to "후원",
Lang.EN to "Donations",
Lang.JA to "支援"
)
)
private val contentCommentMessages = mapOf(
"content.comment.error.blocked_by_creator" to mapOf(
Lang.KO to "%s님의 요청으로 댓글쓰기가 제한됩니다.",
Lang.EN to "Commenting is restricted at %s's request.",
Lang.JA to "%sさんの要請によりコメントの投稿が制限されています。"
),
"content.comment.error.secret_requires_purchase" to mapOf(
Lang.KO to "콘텐츠 구매 후 비밀댓글을 등록할 수 있습니다.",
Lang.EN to "You can post a secret comment after purchasing the content.",
Lang.JA to "コンテンツ購入後に秘密コメントを登録できます。"
),
"content.comment.notification.reply" to mapOf(
Lang.KO to "댓글에 답글을 달았습니다.: %s",
Lang.EN to "Replied to a comment: %s",
Lang.JA to "コメントに返信しました: %s"
),
"content.comment.notification.new" to mapOf(
Lang.KO to "콘텐츠에 댓글을 달았습니다.: %s",
Lang.EN to "Commented on content: %s",
Lang.JA to "コンテンツにコメントしました: %s"
),
"content.comment.error.invalid_access_retry" to mapOf(
Lang.KO to "잘못된 접근 입니다.\n확인 후 다시 시도해 주세요.",
Lang.EN to "Invalid access.\nPlease check and try again.",
Lang.JA to "不正なアクセスです。\n確認して再度お試しください。"
)
)
private val contentDonationMessages = mapOf(
"content.donation.error.minimum_can" to mapOf(
Lang.KO to "1캔 이상 후원하실 수 있습니다.",
Lang.EN to "You can donate at least 1 can.",
Lang.JA to "1缶以上寄付できます。"
),
"content.donation.error.comment_required" to mapOf(
Lang.KO to "함께 보낼 메시지를 입력하세요.",
Lang.EN to "Please enter a message to send.",
Lang.JA to "一緒に送るメッセージを入力してください。"
)
)
private val categoryMessages = mapOf(
"category.error.invalid_access" to mapOf(
Lang.KO to "잘못된 접근입니다.",
Lang.EN to "Invalid access.",
Lang.JA to "不正なアクセスです。"
),
"category.error.title_min_length" to mapOf(
Lang.KO to "카테고리명은 2글자 이상 입력하세요",
Lang.EN to "Category name must be at least 2 characters.",
Lang.JA to "カテゴリ名は2文字以上入力してください。"
)
)
private val alarmMessages = mapOf(
"alarm.error.already_purchased" to mapOf(
Lang.KO to "이미 구매하셨습니다",
@@ -1952,6 +2123,13 @@ class SodaMessageSource {
fun getMessage(key: String, lang: Lang): String? {
val messageGroups = listOf(
commonMessages,
contentErrorMessages,
contentNotificationMessages,
contentFormatMessages,
contentRankingMessages,
contentCommentMessages,
contentDonationMessages,
categoryMessages,
alarmMessages,
auditionMessages,
auditionRequestMessages,