authlogic은 restful_authentication처럼 rails에서 사용자의 인증을 처리해주는 gem이다. restful_authentication보다 더 깔끔하다는 평을 받고 있다.
authlogic의 내부에서는 I18n을 고려하고 있기 때문에 locale data(yml 파일)만 잘 설정해 주면 손쉽게 한글화를 시킬 수 있다. I18n에 대해서는 [Rails] I18n을 이용하기 를 참조.
다음과 같은 번역을 ko.yml 파일에 추가하자.
- authlogic:
error_messages:
login_blank: "은 비워두면 안됩니다"
login_not_found: "을 찾을 수 없습니다"
login_invalid: "은 영어 문자와 숫자, 그리고 .-_@ 만 사용할 수 있습니다"
consecutive_failed_logins_limit_exceeded: "연속되는 로그인 실패로 인해 계정이 사용중지 되었습니다"
email_invalid: "은 올바르지 않은 이메일 형식입니다"
password_blank: "은 비워두면 안됩니다"
password_invalid: "은 올바른 형식이 아닙니다"
not_active: "계정이 사용중지되어 사용할 수 없습니다"
not_confirmed: "계정이 아직 활성화되지 않았습니다"
not_approved: "계정이 아직 승인되지 않았습니다"
no_authentication_details: "로그인 정보를 입력하지 않았습니다"
models:
user_session: "사용자 세션"
attributes:
user_session:
login: "로그인 ID"
email: "이메일"
password: "비밀번호"
remember_me: "아이디 기억하기"
끝.
'Rails' 카테고리의 다른 글
| [Rails] 이전 페이지로 이동하기(back) (0) | 2009/08/14 |
|---|---|
| [Rails] jGrowl을 사용해서 flash message 보여주기 (2) | 2009/06/16 |
| [Rails] authlogic에 I18n 적용하기 (0) | 2009/06/11 |
| [Rails] I18n을 이용하기 (0) | 2009/06/11 |
| 갯수가 아주 많은 목록에 대한 pagination (0) | 2009/02/25 |
| [Rails] SWF upload 사용하기 (0) | 2008/06/30 |
Rails 2.3을 보면 config 밑에 locales라는 디렉토리가 보인다. 이것이 무엇일까?
Rails 2.2 부터 Internationalization(I18n) 이 activesupport에 포함되었다. I18n을 이용하면 비교적 쉽게 한글/영문을 동시에 지원하는 서비스를 만들 수 있다.
목표
rails 2.3을 이용해서 한글과 영문을 동시에 지원하는 서비스 만들기.
한글 페이지의 url은 http://site.com/ko/users 와 같은 식이고 영문 페이지는 http://site.com/en/users와 같은 식이다.
구현
우선 environment.rb를 열어서 기본으로 사용하는 언어에 대해 설정을 해 주자.
- config.i18n.default_locale = :ko
- config.i18n.load_path += Dir[Rails.root.join('config', 'locales', 'ko', '*.yml')]
- config.i18n.load_path += Dir[Rails.root.join('config', 'locales', 'en', '*.yml')]
기본으로 사용하는 언어는 한국어다. 그리고 한국어에 대한 파일은 config/locales/ko 디렉토리에 yml 형식으로 들어 있다.
rails에서 사용하는 기본적인 것들, 즉 시간 같은 것들에 대한 번역은 Locale data for Ruby on Rails I18n 에서 찾아볼 수 있다. 여기서 ko.yml 파일을 복사해서 config/locales/ko 디렉토리에 추가하자. en.yml 파일은 없는데, rails에 영문에 대한 것은 디폴트로 포함되어 있다.
authlogic 같은 인증 관련 gem을 통해서 user model을 만들고, ko 및 en 디렉토리에 user.yml 파일을 생성한다. 파일을 생성한 후에는 서버를 재시작해 주어야 한다. 그러나 파일이 수정될 때마다 재시작 해줄 필요는 없다. 개발환경에서는 재시작하지 않아도 파일 내용의 수정이 반영 된다.
activerecord
user.yml 파일에 activerecord에서 참조할 내용들을 적어주자.
- ko:
activerecord:
models:
user: "사용자"
attributes:
user:
login: "로그인 ID"
email: "이메일"
이렇게 함으로써 activerecord에서 발생하는 validation error가 한글로 번역되어서 보인다. 조사에 약간 문제가 있지만..
view 와 controller
view와 controller에서는 다음과 같이 t를 이용해서 i18n을 사용할 수 있다. model에서는 I18n.t 을 이용한다.
- flash[:notice] = "Login successful!"
대신
- flash[:notice] = t "login.success"
라고 해주면 된다.
그리고 user.yml에 다음과 같이 적어준다.
- ko:
- login:
- :success: "로그인 성공"
시간 포맷
시간 포맷은 다음과 같이 l 을 이용해서 현지화를 시킬 수 있다.
- l Time.now, :format => :short
ko.yml 에 선언된 형식에 의해 시간포맷이 출력된다.
- time:
formats:
default: "%Y/%m/%d %H:%M:%S"
short: "%y/%m/%d %H:%M"
I18n.translate
I18.translate(I18.t) 메소드에 대해서 좀 더 자세히 알아보자.
yml 파일이 다음과 같을 때,
- hello: “안녕하세요”
- hi: “안녕”
- user:
- name: “이름”
- hello: “{{name}}님 안녕하세요”
- total:
- zero: "no one"
- one: "1 person"
- other: "{{size}} people"
배열울 파라미터로 주면 배열의 항목을 번역해 준다.
- I18n.t [:hello, :hi]
- => [“안녕하세요”, “안녕”]
depth가 있는 경우 다 써줘도 되고, scope을 이용해도 된다.
- I18n.t "user.name"
- I18n.t :name, :scope => [:user]
interpolation이 가능하다.
- I18n.t "user.hello", :name => user.name
count을 주면 영리하게 복수화를 시킨다.
- I18n.t "user.total", :count => User.size, :size=>User.size
요청 URL에 locale 정보 포함시키기
http://site.com/en/users 와 같은 식으로 locale정보가 url에 포함되도록 하자. 그리고 이 locale 정보에 맞도록 rails가 응답하도록 하자.
우선 route.rb에 path_prefix를 이용해서 locale의 패턴을 지정해 준다.
- map.resources :users, :path_prefix => '/:locale'
root에 대해서도 locale을 지정할 수 있도록 해 준다. 지정하지 않으면 ko를 사용한다.
- map.locale_root '/:locale', :controller => "records"
- map.root :controller => "records", :locale=>"ko"
그리고 application_controller.rb에 before_filter를 하나 만들어 준다.
- before_filter :set_locale
private
def set_locale
I18n.locale = params[:locale] if params[:locale]
end
마법처럼 간단하다.
참고 페이지
rails cast : http://railscasts.com/episodes/138-i18n
아주 잘 되어있는 문서화 : http://guides.rubyonrails.org/i18n.html
'Rails' 카테고리의 다른 글
| [Rails] jGrowl을 사용해서 flash message 보여주기 (2) | 2009/06/16 |
|---|---|
| [Rails] authlogic에 I18n 적용하기 (0) | 2009/06/11 |
| [Rails] I18n을 이용하기 (0) | 2009/06/11 |
| 갯수가 아주 많은 목록에 대한 pagination (0) | 2009/02/25 |
| [Rails] SWF upload 사용하기 (0) | 2008/06/30 |
| [rails]SWFUpload 사용할 때 Cookie 버그 (0) | 2008/06/30 |