ThinkPhp에는 더 큰 프레임 워크와 같은 내장 된 포괄적 인 I18N/L10N 지원이 없습니다. 그러나 기술의 조합과 잠재적으로 외부 라이브러리를 활용하여 효과적으로 구현할 수 있습니다. 핵심 전략은 코드에서 번역 가능한 문자열을 분리하고 메커니즘을 사용하여 사용자의 로케일을 기반으로 적절한 번역을 선택하는 것입니다.
일반적인 접근법은 다음과 같습니다.
application/lang
) 내에서 별도의 언어 파일 (예 : en.php
, es.php
, fr.php
)을 만듭니다. 각 파일에는 키가 문자열의 고유 식별자를 나타내고 값은 번역 된 텍스트를 나타내는 연관 배열이 포함됩니다. 예를 들어, en.php
:<code class="php"><?php return [ 'hello' => 'Hello', 'welcome' => 'Welcome to our website!', 'login' => 'Login', ];</code>
언어 탐지 : 사용자가 선호하는 언어를 결정하십시오. 이것은 몇 가지 방법을 통해 수행 할 수 있습니다.
$_SERVER['HTTP_ACCEPT_LANGUAGE']
사용하여 브라우저가 선호하는 언어를 얻으십시오. 이것은 종종 신뢰할 수 없지만 좋은 출발점입니다./en
, /es
).Lang
클래스 (버전에서 사용 가능한 경우) 또는 사용자 정의 기능을 사용할 수 있습니다. 사용자 정의 기능 사용 예 :<code class="php">function loadLanguage($locale = 'en') { $langFile = APP_PATH . 'lang/' . $locale . '.php'; if (file_exists($langFile)) { return require $langFile; } return []; // Fallback to default language } $lang = loadLanguage(getLocale()); // getLocale() is a helper function to detect the locale</code>
<code class="php">echo $lang['hello']; // Outputs "Hello" (or the translation in the selected language)</code>
번역 키가 누락 된 경우 잠재적 오류를 우아하게 처리해야합니다.
'submit'
대신 'submit_form'
사용하십시오. ThinkPhp에는 날짜 및 번호 형식을위한 I18N이 내장되어 있지 않습니다. PHP의 Intl
확장자를 사용해야합니다. PHP 구성에서 활성화되어 있는지 확인하십시오.
Intl
확장 내에서 IntlDateFormatter
및 NumberFormatter
클래스가 중요합니다. 예는 다음과 같습니다.
<code class="php">use IntlDateFormatter; use NumberFormatter; // ... (Language detection as before) ... $formatter = new IntlDateFormatter($locale, IntlDateFormatter::LONG, IntlDateFormatter::NONE); echo $formatter->format(time()); // Formats the current date according to the locale $numberFormatter = new NumberFormatter($locale, NumberFormatter::DECIMAL); echo $numberFormatter->format(1234.56); // Formats the number according to the locale</code>
원하는 날짜/시간 형식과 일치하도록 IntlDateFormatter
스타일 상수 (예 : IntlDateFormatter::SHORT
, IntlDateFormatter::MEDIUM
)를 조정하십시오. 마찬가지로 필요에 따라 NumberFormatter
스타일을 조정하십시오.
I18N/L10N에만 초점을 맞춘 널리 인기있는 전용 ThinkPhp 확장은 없습니다. 위에서 설명한 접근법은 일반적으로 충분합니다. 그러나 다음과 같은 기존 PHP 라이브러리를 활용할 수 있습니다.
더 간단한 응용 프로그램의 경우 첫 번째 섹션에 설명 된 수동 접근 방식이 충분할 수 있습니다. 많은 번역이있는 대규모 프로젝트의 경우 gettext
또는 유사한 라이브러리를 사용하는보다 체계적인 접근 방식이 바람직 할 수 있습니다. 특정 라이브러리를 선택하기 전에 이점에 대한 통합의 복잡성을 신중하게 평가하십시오.
위 내용은 ThinkPHP에서 국제화 (I18N) 및 현지화 (L10N)를 구현하려면 어떻게해야합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!