내가 운영중인 혹은 제작중인 사이트가 다국어를 지원해야하는 상황이 오게 된다면 우리는 i18n 을 사용하게 될 때가 있습니다
i18n이란 internationalization(국제화) 라는 단어를 축약한 것입니다. i부터 n까지 18개의 문자수를 축약해서 i18n으로 나타냅니다. 국제화는 다양한 언어 및 지역에 적용할 수 있도록 프로그램을 설계하는 프로세스이죠.
rails 에서 i18n 설정하는 방법
https://guides.rubyonrails.org/i18n.html
위는 rails 에서 i18n 을 하는 방법에 대해 안내한 공식 문서입니다
위의 공식 문서를 보고 코드를 작성하신 후, 아래의 내용을 추가할 시 기본적인 언어 세팅,
application_controller.rb 기본 언어 세팅
application_controller (어플리케이션 로드시 실행되는 컨트롤러) 에서 언어를 설정해줍니다
저의 경우 def set_locale 이라는 I18n.locale 에 언어값을 저장하는 함수를 작성했습니다.
def set_locale 의 내용
1) 로그인 한 상태라면 DB 에 저장된 언어값으로 세팅
2) 로그인 하지 않았다면 Geocoder 를 사용해 현재 위치를 가져와 해당하는 언어로 세팅
3) 로그인 하지 않았다면 수동으로 설정가능하게 하고, 설정하는 경우 쿠키에 저장해서 사용 (1주일 만료짜리)
4) 로그인을 한다면 2 나 3 의 값을 User 테이블에 저장.
제한적인 언어 수용. 모든 언어를 처리하지는 않을 것이기 때문에 저는 4가지의 언어만 허용했습니다
end
그리고 해당 설정은 , 항상 먼저 실행되도록 합니다
해당 언어들만 허가하겠다는 코드를 application.rb 에도 추가를 해줍니다
en, kr, ja, cn 을 허용하되, default 는 en 으로 두는 설정입니다
언어셋 처리는
config/locale 폴더에 kr.yml, en.yml, cn.yml, ja.yml 파일을 생성 후
이와 같이 만들면 됩니다. 해당 포스팅은 파일셋을 만드는 내용에 대한 포스팅이 아니므로, 글 초반에 언급한 rails i18n 가이드를 참고해주시기 바랍니다
url 에 언어를 나타내는 방법
application_controller.rb 기본 언어로 url 세팅
1. excluded_paths 를 설정한 이유
: modal(팝업)을 열거나, 부분적인 component 로 화면을 열 시에는 라우팅에 locale 이 들어갈 필요가 없기 때문이죠. 이미 페이지 상에서 url 에 locale 이 있고, 페이지 내의 component 에서 는 get 을 할 뿐, locale 이 포함된 routing 이 필요한게 아니기 때문이죠
2. if request.get? && params[:locale].blank? && !excluded_paths.any? { |path| request.path.start_with?(path) } 의 조건을 건 이유
: 요청이 post 인 경우에 요청 url 에 locale 을 포함을 해야 할 이유는 전혀 없죠. 따라서 요청 url 이 get 인 경우에만, 그리고 excluded_paths 가 아닌 경우에만 실행하게 했습니다
이 부분도 먼저 실행이 되어야겠죠?
전체적인 url 이 바뀌었으니 SEO 설정도 바꾸셔야 합니다. 아래의 포스팅을 참고해주세욤
'테크 세미나 > 개발 Nous' 카테고리의 다른 글
gitlab 에서 한 작업들을 github 으로 가져오기 (gitlab 잔디 옮겨심기) (2) | 2024.06.14 |
---|---|
개발자가 할 수 있는 간단한 SEO 설정 - robots.txt, sitemap (2) | 2024.06.12 |
드래그 가능한 테이블 만들기 (0) | 2024.03.22 |
깃허브 꾸미기 Readme 꾸미기 (0) | 2024.03.20 |
터미널에서 code . 로 VScode 열기 설정 (2) | 2023.12.23 |