CI 묻고 답하기

제목 지역화 라우팅 관련해서 질문이 있습니다.
카테고리 CI 4 관련
글쓴이 kasumil 작성시각 2022/09/25 22:35:00
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 6927   RSS

안녕하세요. 질문이 있어서 왔습니다.

기존에 있던 질문이기도 한데, 제대로 된 답변이 없어서 질문하게 되었습니다.

 

제 질문의 총 요약은 도메인/kr/params를 넣는 방법을 찾고 있습니다.

$routes->get('/{locale}', 컨트롤러::index)로 구성하면 locale가 없는 경우에 다른 페이지로 이동이 안되더군요.

www.domain.com/en은 접속이 되나, www.domain.com/다른페이지 는 접속이 안됩니다. locale때문에 그런 것 같습니다.

해당 문제가 있어서 어떻게 처리할 수 있는 방법이 없나 싶어 질문하게 되었습니다.

 

기존에 특정 컨트롤러를 만들어 route에서 해당 컨트롤러 접속시 session값 변경 후 redirect로 언어변경을 진행하였습니다. 

해당 방법의 경우 도메인에 언어 노출이 되지 않아서 좋았습니다.

그런데, 해당 방법의 경우 SEO 다국어 최적화에서 리다이렉션때문에 다국어 버전 구글봇 크롤링이 되지 않더군요.

그래서 해당 방법을 바꾸려고 합니다.

 

http://ci4doc.cikorea.net/outgoing/localization.html?highlight=%EC%A7%80%EC%97%AD%ED%99%94#route

위 링크에서 지역화의 방식을 사용하려고 합니다.

<?php

$routes->get('{locale}/books', 'App\Books::index');

 

질문의 내용은 이러합니다.

1. 해당 방법을 먹였으나 session값이 자동으로 변하지 않습니다. 따로 해당 컨트롤러마다 getLocale을 해줘야하는건가요?

 ㄴ 해당 언어를 어떻게 설정하나요?

 ㄴ 기존 코드 설정이 negotiateLocale = true인데, false로 변경해야하는 것인가요?

2. 해당 www.site.com/kr로 구성했을 경우 home의 경우 라우팅이 되나, 다른 페이지는 자동 라우팅이 안되는데,

기존 www.site.com/about이었는데 해당 방식으로 로케일을 끼우려면 www.site.com/kr/about으로 어떻게 해야하는 것인지 알려주실 수 있으시나요?

 

샘플이라도 있으면 좋겠는데 없어서 좀 난감합니다.;;;

 

 다음글 CI 3.1.13 로컬환경에서만 keep_flashda... (2)
 이전글 ajax로 조회 값 던진 걸, 목록에서 조회되게 처리하... (3)

댓글

테러보이 / 2022/09/27 09:02:54 / 추천 1

저도 로케일을 직접 써보지는 않았지만 다음과 같이 시도 해볼 필요는 있을듯 합니다.

1. 베이스 컨트롤러에서 `setLocale`처리 ( http://ci4doc.cikorea.net/outgoing/localization.html#id3 )

  - get은 header설정의 locale을 읽어 처리 하는것 같습니다.

2. negotiateLocale는 1번에서 직접 처리 하기 때문에 true이든 false이든 상관 없을듯 합니다.

3. 라우터에서 about도 똑같이 잡아주셔야합니다. ( http://ci4doc.cikorea.net/outgoing/localization.html#route )

  - 주소에 kr, en등 붙여 나가는경우 라우터에서 {locale} 처리 해야 할듯합니다. 아니면 언어변경 컨트롤러를 만들고 세션을 구운다음 리다이렉트 하거나

4. 예제

https://includebeer.com/en/blog/creating-a-multilingual-website-with-codeigniter-4-part-1

https://onlinewebtutorblog.com/codeigniter-4-language-localization-multilanguage-site-tutorial/

kasumil / 2022/09/29 00:22:38 / 추천 0

테러보이 // 답변 감사합니다. 바쁘다보니 답변이 늦었습니다.

일단 급해서 해당 주소의 페이지를 home 컨트롤러를 보는 /kr, /en으로 더 만들어 해당 주소로 들어올경우 locale을 바로 만들고, 없으면 기본으로 인식하게 구현하였습니다.

추후 알려주신 방식으로 구현해봐야할 것 같습니다 

 

변종원(웅파) / 2022/10/05 21:00:37 / 추천 0
저는 주소로 처리하지 않고 쿠키로 처리했습니다. 처음 들어올때는 기본 로케일로 설정하고 다른 로케일을 선택할 경우 쿠키로 굽고 setLocale 처리. 쿠키가 남아 있어서 다음에 다시 들어와도 로케일 적용. 이정도로 처리했습니다.