chatwoot/config/locales/devise.ko.yml
Sojan Jose 0920a01e66
fix(i18n): align pluralization with locale rules (#14266)
Loads Rails locale-specific pluralization rules so languages with an
`other`-only plural model can safely use Crowdin exports without
maintaining duplicate `one` keys.

## Closes

None

## Why

Crowdin exports Rails YAML pluralized strings using each target
language's plural categories. These categories come from Unicode CLDR
and represent grammatical forms, not a literal "number is 1" bucket.

Some languages need separate forms such as `one` and `other`, but
languages like Japanese, Korean, Indonesian, Thai, Vietnamese, and
Chinese use the same form for `1`, `2`, `5`, and larger counts in these
strings. For those locales, CLDR correctly models the plural category as
`other` only.

Before this change, Chatwoot still relied on Rails' default
English-style plural behavior for these locales. That meant a valid
Crowdin export containing only `other` could fail at runtime when Rails
received `count: 1` and looked for a missing `one` branch.

Keeping duplicate `one` keys would only fight Crowdin on every
translation sync. The runtime should instead follow the locale's plural
rules.

## What changed

- Added `rails-i18n` and enabled only its pluralization module.
- Added explicit `other`-only plural rules for Chatwoot's underscore
Chinese locale aliases, `zh_CN` and `zh_TW`.
- Removed redundant `one` keys from the affected Devise and `time_units`
translations.

## Validation

- Ran a Rails runner check across `id`, `ja`, `ko`, `ms`, `th`, `vi`,
`zh_CN`, and `zh_TW` to verify `errors.messages.not_saved` and
`time_units.days` resolve with only `other` for `count: 1`.
- Ran YAML parse validation for all edited locale files.
- Ran `bundle exec rubocop Gemfile config/application.rb
config/initializers/i18n_pluralization.rb`.
2026-04-27 15:40:00 +05:30

61 lines
4.6 KiB
YAML

#Additional translations at https://github.com/plataformatec/devise/wiki/I18n
ko:
devise:
confirmations:
confirmed: "귀하의 이메일 주소가 성공적으로 확인되었습니다."
send_instructions: "몇 분 안에 이메일 주소를 인증하는 방법에 대한 지침이 발송될 것입니다."
send_paranoid_instructions: "귀하의 이메일 주소가 당사 데이터베이스에 있는 경우 몇 분 안에 이메일 주소를 인증하는 방법에 대한 지침이 포함된 이메일이 발송될 것입니다."
failure:
already_authenticated: "이미 로그인되어 있습니다."
inactive: "귀하의 계정이 아직 활성화되지 않았습니다."
invalid: "유효하지 않은 %{authentication_keys}/비밀번호이거나 계정이 아직 인증되지 않았습니다."
locked: "계정이 잠금 상태입니다."
last_attempt: "계정이 잠기기 전에 남은 마지막 시도입니다."
not_found_in_database: "잘못된 %{authentication_keys} 또는 잘못된 비밀번호입니다."
timeout: "세션이 만료되었습니다. 계속하려면 다시 로그인하십시오."
unauthenticated: "계속하기 전에 로그인하거나 가입해야 합니다."
unconfirmed: "계속하기 전에 이메일 주소를 확인해 주십시오."
mailer:
confirmation_instructions:
subject: "확인 절차"
reset_password_instructions:
subject: "비밀번호 재설정 안내"
unlock_instructions:
subject: "잠금 해제 안내"
password_change:
subject: "비밀번호가 변경되었습니다"
omniauth_callbacks:
failure: "\"%{reason}\"(으)로 인해 %{kind}에서 인증할 수 없습니다."
success: "%{kind} 계정에서 성공적으로 인증되었습니다."
passwords:
no_token: "비밀번호 재설정 이메일을 받지 않으셨다면 이 페이지에 접근할 수 없습니다. 비밀번호 재설정 이메일에서 온 경우 전체 URL을 사용했는지 확인하십시오."
send_instructions: "몇 분 안에 비밀번호 초기화 방법에 대한 지침이 귀하의 이메일로 발송될 것입니다."
send_paranoid_instructions: "귀하의 이메일 주소가 당사 데이터베이스에 있는 경우 몇 분 안에 비밀번호 복구 링크가 이메일로 발송될 것입니다."
updated: "비밀번호가 성공적으로 변경되었습니다. 현재 로그인 상태입니다."
updated_not_active: "비밀번호가 성공적으로 변경되었습니다."
registrations:
destroyed: "계정이 성공적으로 취소되었습니다. 곧 다시 뵙기를 바랍니다."
signed_up: "환영합니다! 성공적으로 가입하셨습니다."
signed_up_but_inactive: "성공적으로 가입하셨습니다. 그러나 계정이 아직 활성화되지 않아 로그인할 수 없습니다."
signed_up_but_locked: "성공적으로 가입하셨습니다. 그러나 계정이 잠겨 있어 로그인할 수 없습니다."
signed_up_but_unconfirmed: "확인 링크가 포함된 메시지가 이메일 주소로 전송되었습니다. 링크를 따라 계정을 활성화하십시오."
update_needs_confirmation: "계정이 성공적으로 업데이트되었습니다. 새 이메일 주소를 확인해야 합니다. 이메일을 확인하고 확인 링크를 따라 새 이메일 주소를 인증하십시오."
updated: "계정이 성공적으로 업데이트되었습니다."
sessions:
signed_in: "성공적으로 로그인했습니다."
signed_out: "성공적으로 로그아웃했습니다."
already_signed_out: "성공적으로 로그아웃했습니다."
unlocks:
send_instructions: "몇 분 안에 계정 잠금 해제 방법에 대한 지침이 이메일로 발송될 것입니다."
send_paranoid_instructions: "귀하의 계정이 존재하는 경우 몇 분 안에 잠금 해제 방법에 대한 지침이 이메일로 발송될 것입니다."
unlocked: "계정이 성공적으로 잠금 해제되었습니다. 계속하려면 로그인하십시오."
errors:
messages:
already_confirmed: "이미 확인되었습니다. 로그인을 시도하십시오"
confirmation_period_expired: "%{period} 이내에 확인해야 합니다. 새로 요청하십시오"
expired: "만료되었습니다. 새로 요청하십시오"
not_found: "찾을 수 없습니다"
not_locked: "잠겨 있지 않습니다"
not_saved:
other: "%{count}개의 오류로 인해 이 %{resource}을(를) 저장할 수 없습니다:"