mirror of
https://github.com/chatwoot/chatwoot.git
synced 2026-06-13 21:01:16 +08:00
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`.
61 lines
4.6 KiB
YAML
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}을(를) 저장할 수 없습니다:"
|