Created
October 31, 2012 17:26
-
-
Save clee704/3988479 to your computer and use it in GitHub Desktop.
Display proper Korean particles in error messages
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# encoding: UTF-8 | |
# Original article: http://dailyupgrade.me/post/6806676778/rubyonrails-full-messages-for-korean | |
# Modified to support more postpositions and client_side_validations gem. | |
# | |
# Add Korean translations like this: | |
# ko: | |
# errors: | |
# format: "%{message}" | |
# messages: | |
# blank: "%{attribute}((이)) 입력되지 않았습니다" | |
# taken: "이미 사용 중인 %{attribute}입니다" | |
# invalid: "잘못된 %{attribute}입니다" | |
# too_short: "%{attribute}((이)) 너무 짧습니다" | |
# | |
class Korean | |
POSTPOSITIONS = {"은" => "는", "이" => "가", "을" => "를", "과" => "와", "으로" => "로"} | |
def self.select_postposition(last_letter, postposition) | |
return postposition unless last_letter >= "가" && last_letter <= "힣" | |
final = last_letter.mb_chars.last.decompose[2] | |
if final.nil? | |
# 받침 없음 | |
POSTPOSITIONS[postposition] || postposition | |
elsif final == "ㄹ" && (postposition == "으로" || postposition == "로") | |
# 'ㄹ 받침 + (으)로'를 위한 특별 규칙 | |
"로" | |
else | |
# 받침 있음 | |
POSTPOSITIONS.invert[postposition] || postposition | |
end | |
end | |
end | |
module ActiveModel | |
class Errors | |
old_generate_message = instance_method("generate_message") | |
define_method("generate_message") do |attribute, type = :invalid, options = {}| | |
msg = old_generate_message.bind(self).(attribute, type, options) | |
return msg unless I18n.locale == :ko | |
msg.gsub(/(?<=(.{1}))\(\((은|는|이|가|을|를|과|와|으로|로)\)\)/) do | |
Korean.select_postposition $1, $2 | |
end | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment