[arrays] codeigniter 웹 사이트를 다국어로 만드는 가장 좋은 방법입니다. lang 배열에서 호출은 lang 세션에 달려 있습니까?

시간과 시간을 조사하고 있지만 명확하고 효율적인 방법을 찾지 못했습니다.

영어로 된 codeigniter 기반 웹 사이트가 있는데 지금 폴란드어를 추가해야합니다. 방문자 선택에 따라 2 개 언어로 사이트를 만드는 가장 좋은 방법은 무엇입니까?

각 언어에 대한 배열 파일을 만들고 lang 선택에서 세션에 따라 뷰 파일에서 호출하는 방법이 있습니까? 데이터베이스를 사용하고 싶지 않습니다.

도움을 주셔서 감사합니다! 마감일이 다 됐습니다 : / 감사합니다 !!



답변

CodeIgniter의 언어 라이브러리를 보셨습니까 ?

언어 클래스는 국제화를 위해 언어 파일과 텍스트 줄을 검색하는 함수를 제공합니다.

CodeIgniter 시스템 폴더에는 언어 파일 세트가 포함 된 언어라는 폴더가 있습니다. 오류 및 기타 메시지를 다른 언어로 표시하기 위해 필요에 따라 고유 한 언어 파일을 작성할 수 있습니다.

언어 파일은 일반적으로 시스템 / 언어 디렉토리에 저장됩니다. 또는 응용 프로그램 폴더 안에 language라는 폴더를 만들어 저장할 수 있습니다. CodeIgniter는 응용 프로그램 / 언어 디렉토리에서 먼저 찾습니다. 디렉토리가 없거나 지정된 언어가없는 경우 CI는 대신 글로벌 시스템 / 언어 폴더를 찾습니다.

귀하의 경우에는 …

  • 당신은 polish_lang.phpenglish_lang.php내부 를 만들어야합니다application/language/polish
  • 그런 다음 해당 파일 내에 키를 만듭니다 (예 : $lang['hello'] = "Witaj";
  • 그런 다음 컨트롤러에로드하십시오. $this->lang->load('polish_lang', 'polish');
  • 그런 다음 $this->lang->line('hello');이 함수의 반환 값을 변수에 저장하여 뷰에서 사용할 수 있도록 다음 과 같은 줄을 가져옵니다 .

영어 및 필요한 다른 모든 언어에 대해 단계를 반복하십시오.


답변

또한 세션에 언어를 추가하기 위해 각 언어에 대한 몇 가지 상수를 정의한 다음 config / autoload.php에 세션 라이브러리가 자동로드되었는지 확인하거나 필요할 때마다로드합니다. 사용자가 원하는 언어를 세션에 추가합니다.

$this->session->set_userdata('language', ENGLISH);

그런 다음 언제든지 다음과 같이 잡을 수 있습니다.

$language = $this->session->userdata('language');


답변

컨트롤러에서 cunstructor를 만들 때 다음 줄을 추가하십시오.

즉, 이후

parent :: Controller ();

아래 줄 추가

    $this->load->helper('lang_translate');
    $this->lang->load('nl_site', 'nl'); // ('filename', 'directory')

다음 기능으로 도우미 파일 lang_translate_helper.php를 만들고 system \ application \ helpers 디렉토리에 넣으십시오.

function label($label, $obj)
{
    $return = $obj->lang->line($label);
    if($return)
        echo $return;
    else
        echo $label;
}

각 언어에 대해 system \ application \ languages ​​아래에 en, nl, fr 등과 같은 언어 약어로 디렉토리를 만듭니다.

아래에 주어진대로 label => language_value 쌍을 보유하는 $ lang 배열을 포함 할 위 (각각) 디렉토리에 언어 파일을 만듭니다.

nl_site_lang.php

$lang['welcome'] = 'Welkom';
$lang['hello word'] = 'worde Witaj';

en_site_lang.php

$lang['welcome'] = 'Welcome';
$lang['hello word'] = 'Hello Word';

예를 들어, 백엔드 (관리자 섹션) 관리를 위해 별도의 언어 파일을 원할 경우 컨트롤러에서 $ this-> lang-> load ( ‘nl_admin’, ‘로 사용할 수 있습니다. nl ‘);

nl_admin_lang.php

$lang['welcome'] = 'Welkom';
$lang['hello word'] = 'worde Witaj';

마지막으로 원하는 언어로 라벨을 인쇄하려면 아래와 같이 라벨에 액세스하십시오.

label ( ‘welcome’, $ this);

또는

label ( ‘안녕하세요’, $ this);

hello & word의 공백을 참고하십시오.이 방식으로도 사용할 수 있습니다. 🙂

언어 파일에 정의 된 레이블이 없으면 함수 레이블에 전달한 내용을 간단히 인쇄합니다.


답변

나는 Randell의 대답을 두 번째로한다.

그러나 http://www.maxmind.com/app/php
또는 http://www.ipinfodb.com/ 과 같은 GeoIP는 항상 통합 할 수 있습니다. 그런 다음 codeigniter 세션 클래스로 결과를 저장할 수 있습니다.

ipinfodb.com api를 사용하려는 경우 ip2locationlite.class.php 파일을 codeigniter 애플리케이션 라이브러리 폴더에 추가 한 다음 모델 함수를 생성하여 다음과 같이 애플리케이션에 필요한 모든 geoip 로직을 수행 할 수 있습니다.

function geolocate()
{
    $ipinfodb = new ipinfodb;
    $ipinfodb->setKey('API KEY');

    //Get errors and locations
    $locations = $ipinfodb->getGeoLocation($this->input->ip_address());
    $errors = $ipinfodb->getError();

   //Set geolocation cookie
   if(empty($errors))
   {
       foreach ($locations as $field => $val):
            if($field === 'CountryCode')
            {
                $place = $val;
            }
       endforeach;
   }
   return $place;
}


답변

더 쉽게 사용할 수 있도록 CI가 이것을 업데이트했기 때문에

$this->load->helper('language');

및 텍스트 번역

lang('language line');

라벨 내부를 휘게하려면 선택적 매개 변수를 사용하세요.

lang('language line', 'element id');

이것은 출력됩니다

// becomes <label for="form_item_id">language_key</label>

좋은 읽기
http://ellislab.com/codeigniter/user-guide/helpers/language_helper.html


답변

Wiredesignz의 MY_Language 클래스를 성공적으로 사용했습니다.

어디에서도 흔적을 찾을 수 없어서 방금 github에 게시했습니다.

https://github.com/meigwilym/CI_Language

내 유일한 변경 사항은 새로운 v2 변경 사항에 따라 클래스 이름을 CI_Lang으로 변경하는 것입니다.


답변

실제 파일을 관리 할 때 실제로 경계하지 않는 한 상황이 매우 쉽게 동기화되지 않을 수 있습니다. 따라서 언어 파일을 쉽게 추적하고 번역사와 협업 할 수있는 String 이라는 (베타) 무료 서비스를 출시했습니다 .

기존 언어 파일 (PHP 배열, PHP 정의, ini, po 또는 .strings 형식)을 가져 오거나 처음부터 자신의 섹션을 만들고 시스템을 통해 직접 콘텐츠를 추가 할 수 있습니다.

String은 완전 무료이므로 확인 하시고 의견을 보내주세요.

실제로 Codeigniter에도 구축되었습니다! http://mygengo.com/string 에서 베타를 확인하세요 .