CI 묻고 답하기

제목 ci4 지역화 교체는 어떻게 하나요?
카테고리 CI 4 관련
글쓴이 kasumil 작성시각 2022/01/24 15:20:06
댓글 : 1 추천 : 0 스크랩 : 0 조회수 : 8975   RSS

지금 지역화를 통해서 언어 변환 해당 부분을 구현하였습니다.

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

샘플 만들어주신 불의회상(한대승)님에게 감사합니다.

 

라우터로 url에 넣어서 기능구현이 아니라 특정 버튼 클릭시 작동되길 원하고 있습니다.

그래서 VIEW인 헤더에서 Kor, Eng 클릭시 해당 번역작동되게 변경되고 싶습니다.

페이지 새로고침 없이 가능할까요?

안된다면, 그냥 클릭시 페이지 갱신을 통해 자동으로 전체 페이지 번역이 진행하려고 합니다.

그냥 접속시에는 en이 호출되고 언어 변경시에 ko값을 호출되어지는 방식으로 구현하고 싶습니다.

 

// api.php

protected function lang_KR()
	{
        echo lang('Sample.errorEmailMissing', [time()], 'kr'); // 해당 부분
	}

    protected function lang_EN()
	{
        echo lang('Sample.errorEmailMissing', [time()], 'en');
	}

//header.php

<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>

 

일단 a태그는 이동인것 같으니 이런 방식은 절대 아니라고 보고 있습니다.

컨트롤러 함수를 호출하고 lang 함수를 통해 locale을 교체 해야하는데, 현재 어찌해야할지 모르겠습니다.

ajax 같은 통신으로 불러들여 redirection 해야하는 걸까요?

 다음글 CI4 form Validation check 속도 관... (5)
 이전글 ci4 get_text 기능 구현하려면 어떻게 해야하나... (2)

댓글

kasumil / 2022/01/24 17:50:16 / 추천 0

해결 했습니다.

<a class="dropdown-item" href="<?= base_url('lang/en'); ?>">English</a>
<a class="dropdown-item" href="<?= base_url('lang/es'); ?>">Español</a>
then I used a route for language-

$routes->get('/lang/{locale}', 'Language::index');
For this route I created a class Language with a method index-

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);     
    }
}


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);
    }
}

 

출처코드

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