로케일


전세계를 위한 웹사이트 서비스 지원을 통하여 다국어 처리는 중요한 부분으로 등장하고 있습니다. 지니는 url을 기준으로 다국어 정보를 동적으로 받아 처리할 수 있도록 구성되어 있습니다.

언어코드 삽입


도메인/ko 와 같이 언어 코드를 삽입할 수 있습니다. 언어 코드를 삽입하게 되면 코드만 분리하여 시스템 언어 설정을 합니다.

국가 코드 삽입


다국어 서비스와 달리 국가별로 서비스를 하고자 하는 경우도 있습니다. 도메인/kr 처럼 국가 코드를 입력하면, 각 국가에 대한 페이지가 처리됩니다.

문화코드


문화 코드는 언어와 국가 코드가 같이 설정되어 있는 경우 입니다.

미국, 캐나다와 같이 다민족 국가의 경우 여러 가지 경우로 웹페이지를 제공해야 합니다.

en-ca fr-ca 처럼 말입니다.

코드 문자열


URL을 통하여 코드를 입력할때 로케일은 보통 첫번째 구분자에 입력을 합니다. 하지만 매번 복잡한 로케일을 검사하는 것은 속도 저하를 가지고 올 수 있습니다.

보통 언어, 국가의 경우 2글자로 표기됩니다. 문화코드의 경우 -을 포함하여 5글자로 구분이 됩니다.

따라서 첫번째 식별자가 2, 5자인 경우에만 코드를 처리합니다. 그리고 이때 로케일을 처리하는 클래스를 생성하게 됩니다.

이러한 동적 방식은 클래스의 메모리와 속도를 개선하는데 도움을 줍니다.

/**
* URI 로케일을 분석합니다.
*/
private function isLocale($urls)
{
    if (isset($urls[0])) {
        // 로케일 코드값은 2글자 또는 5글자 입니다.
        $lenLC = strlen($urls[0]);
        if($lenLC == 2 || $lenLC == 5) {
            $Locale = Registry::create(\Jiny\Locale\Locale::class, "Locale", $this);
            return $Locale->parser($urls);

        } else {
            // 로케일 글자수가 다른 경우에는
            // 로케일 처리를 하지 않습니다.
        }                      
    }

    return FALSE;
}

동적로딩


로케일 클래스는 국가, 언어, 문화등의 다양한 데이터를 로딩하여 처리를 합니다. 큰 용량의 데이터를 로딩하여 처리하는 것은 많은 시간을 소요하게 됩니다.

지니는 데이터를 검사하기 전에 먼저 배열의 값을 비교하여 없는 경우에 데이터 배열을 로드하는 동작을 가집니다.

이로 속도 개선과 용량을 최적화 할 수 있습니다.

클래스


로케일 클래스는 레지스트리를 통하여 동적으로 로딩하게 됩니다. 동적으로 로딩된 클래스는 코드가 종료될때 까지 메모리에 상주하게 됩니다.

다른 클래스에서 로케일 클래스에 접근하기 위해서는 레지스트리 GET 메소드를 이용하면 됩니다.

$obj = Registry::get(클래스명);

국가코드 확인하기

먼저 locale 클래스가 로딩되어 있어야 합니다. 로케일의 서브 메소드 getCountry() 를 통하여 url로 부터 분리된 국가 코드를 읽어 올 수 있습니다.

로케일


로케일은 지니PHP의 다국어 처리 확장을 위해서 개발된 패키지 입니다. 로케일은 지니PHP에 기본적으로 설치가 되어 있습니다. 만일 설치가 되어 있지 않은 경우에는 다음 명령으로 추가할 수 있습니다.

composer require jiny/locale

로케일 코드


보통 웹서비스의 로케일의 정보는 url을 통하여 같이 입력이 되는 경우가 많습니다. 우리는 흔히 해외 다국어 사이트를 접속할 경우 도메인/kr과 같이 국가 코드를 적어서 사용하는 것을 보실 수 있습니다. 또는 도메인/en 과 같이 언어 코드를 사용하는 경우도 있습니다.

미국과 캐나다등 다민족 국가의 경우에는 문화코드로 도메인/US-en과 같이 국가 코드와 언어를 동시에 설정을 하는 경우도 있습니다.

  • 국가코드
  • 언어코드
  • 문화코드

지니 로케일 페키지는 위와 같이 3가지의 타입을 모두 지원하는 코드 분석기를 포함하고 있습니다.

코드처리


로케일 구분은 url의 경로값으로 같이 전달이 되어 집니다. 따라서 로케일의 첫번째 동작은 지니PHP에서 url을 분석처리하는 부트스트래핑에서 처음으로 호출하게 됩니다. 프레임워크의 부트스트래핑은 입력된 url을 분석하는 역활을 하게 됩니다.

로케일 코드는 보통 도메인/로케일/company와 같이 도메인의 첫번째 인자 값으로 전될 되는 경우가 대부분 입니다. 따라서, 부트스트래핑은 도메인의 첫번째 인자값이 로케일 코드인지를 확인하는 역할을 하게 됩니다.

이렇게 로케일 코드가 확인하게 되면, 로케일의 인스턴스를 호출하여 국가코드와 언어코드를 확인 하실 수 있습니다.

로케일


전세계를 위한 웹사이트 서비스 지원을 통하여 다국어 처리는 중요한 부분으로 등장하고 있습니다.

지니는 url을 기준으로 다국어 정보를 동적으로 받아 처리할 수 있도록 구성되어 있습니다.

언어코드 삽입


도메인/ko 와 같이 언어 코드를 삽입할 수 있습니다. 언어 코드를 삽입하게 되면 코드만 분리하여 시스템 언어 설정을 합니다.

국가 코드 삽입


다국어 서비스와 달리 국가별로 서비스를 하고자 하는 경우도 있습니다. 도메인/kr 처럼 국가 코드를 입력하면, 각 국가에 대한 페이지가 처리됩니다.

문화코드


문화 코드는 언어와 국가 코드가 같이 설정되어 있는 경우 입니다.

미국, 캐나다와 같이 다민족 국가의 경우 여러 가지 경우로 웹페이지를 제공해야 합니다.

en-ca fr-ca 처럼 말입니다.

코드 문자열


URL을 통하여 코드를 입력할때 로케일은 보통 첫번째 구분자에 입력을 합니다. 하지만 매번 복작한 로케일을 검사하는 것은 속도 저하를 가지고 올 수 있습니다.

보통 언어, 국가의 경우 2글자로 표기됩니다. 문화코드의 경우 -을 포함하여 5글자로 구분이 됩니다.

따라서 첫번째 식별자가 2, 5자인 경우에만 코드를 처리합니다. 그리고 이때 로케일을 처리하는 클래스를 생성하게 됩니다.

이러한 동적 방식은 클래스의 메모리와 속도를 개선하는데 도움을 줍니다.

    /**
     * URI 로케일을 분석합니다.
     */
    private function isLocale($urls)
    {
        // \TimeLog::set(__METHOD__);
        if (isset($urls[0])) {
            // 로케일 코드값은 2글자 또는 5글자 입니다.
            $lenLC = strlen($urls[0]);
            if($lenLC == 2 || $lenLC == 5) {
                $Locale = Registry::create(\Jiny\Locale\Locale::class, "Locale", $this);
                return $Locale->parser($urls);

            } else {
                // 로케일 글자수가 다른 경우에는
                // 로케일 처리를 하지 않습니다.
            }                      
        }

        return FALSE;
    }

동적로딩


로케일 클래스는 국가, 언어, 문화등의 다양한 데이터를 로딩하여 처리를 합니다. 큰 용량의 데이터를 로딩하여 처리하는 것은 많은 시간을 소요하게 됩니다.

지니는 데이터를 검사하기 전에 먼저 배열의 값을 비교하여 없는 경우에 데이터 배열을 로드하는 동작을 가집니다.

이로 속도 개선과 용량을 최적화 할 수 있습니다.

클래스


로케일 클래스는 레지스트리를 통하여 동적으로 로딩하게 됩니다. 동적으로 로딩된 클래스는 코드가 종료될때 까지 메모리에 상주하게 됩니다.

다른 클래스에서 로케일 클래스에 접근하기 위해서는 레지스트리 GET 메소드를 이용하면 됩니다.

$obj = Registry::get(클래스명);

국가코드 확인하기 먼저 locale 클래스가 로딩되어 있어야 합니다. 로케일의 서브 메소드 getCountry() 를 통하여 url로 부터 분리된 국가 코드를 읽어 올 수 있습니다.