취업/CodeIgniter

[CI4]codeigniter4 다중 언어 지원하기, 언어변경, 여러 언어 지원

카슈밀 2022. 1. 24. 20:49
반응형
<div class="has_popup2">
    <div class="color_black" style="cursor:pointer;"> <i class="ri-earth-fill"></i></div>
    <ul class="menu__popup2 space-y-20" style="cursor:pointer;">
        <li>
            <a href="/api/lang_KR">KOR</a>
        </li>
        <li>
            <a href="/api/lang_EN">ENG</a>
        </li>
    </ul>
</div>

nav바에서 클릭시 언어를 불러오는 것이 필요했다.

이를 구현하기 위해서 어떻게 해야하는가?

처음엔 단순히 api호출만 생각했는데, 그럴 필요가 없었다. 위의 코드로는 작동이 안된다.

아래 코드로 할 것.

 

겨우 찾아냈던 코드인데, 이를 위해서 언어를 설정할 곳이 필요하다.

// view\프론트.php
<a class="dropdown-item" href="<?= base_url('lang/en'); ?>">English</a>
<a class="dropdown-item" href="<?= base_url('lang/es'); ?>">Español</a>


// Config\Routes.php;
$routes->get('/lang/{locale}', 'Language::index'); // 해당 코드 추가. 그 이유가 다른 "/"로 들어가면 다른 곳으로 가야하니까. 그러함. 해당 함수만 일부러 이렇게 오게 설정하였다

 
// controller\Language.php;
class Language extends BaseController
{
    public function index()
    {   
    	$session = session();
        // $locale = $this->request->getLocale(); // 원래 이건데 이거 호출시 안먹혀서 아래 방법으로 대체하였다.
        $locale = service('request')->getLocale();
        $session->remove('lang');
        $session->set('lang',$locale);
        $url = base_url();
        return redirect()->to($url);    
    }
}
 
 // controller\Basecontroller.php
class BaseController extends Controller{
    public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
    {
      $session = \Config\Services::session();
      $language = \Config\Services::language();
      $language->setLocale($session->lang);
    }
}

이렇게 구현했다.

뭐 땜시 구현이 안되던데, 뭔가했더니 주소가 달라졌더라.

config/app.php 에서 default 페이지가 실제 도메인 주소로 연결되게 되어있어서 호출이 안되던 문제가 있었다.

해당 부분 해결하니 바로 붙던...

 

아무튼 여기는 그냥 호출 부분이고,

app\language\나라별폴더\sample.php 또는 app.php이든 동일한 이름으로 호출해야한다.

자세한 방법은 아래 링크 찾아볼 것.

http://sample4.cikorea.net/response/localization

 

지역화 (Localization) - Codeignit4 Sample

지역화 CodeIgniter는 어플리케이션을 다른 언어로 지역화하는데 도움이 되는 몇 가지 도구를 제공합니다. 어플리케이션의 전체 지역화는 복잡한 주제이지만 어플리케이션에서 지원되는 언어로

sample4.cikorea.net

 

출처

https://stackoverflow.com/questions/60250996/how-to-set-specific-language-for-all-pages-in-codeigniter-4

 

How to set specific language for all pages in Codeigniter 4

I've translated 2 language in 'app/Language' folder and set language switcher. Currently translation works fine for base url like example.com/en and example.com/sp. My problem is when visitor visits

stackoverflow.com

 

728x90