LC_ALL이 설정되지 않을 수 있으므로 LANG 환경 변수에서 로케일을 가져와야합니다. 이 기능은 Windows와 호환되지 않을 수 있습니다. 알려 주시면 업데이트하겠습니다.
//default locale to use when all else fails
define('DEFAULT_LANG', 'en_US.UTF-8');
/**
* returns the current locale based on the LANG environment variable.
* Only calls getenv() once, after that uses a cached value. remove the static
* keyword to disable this functionality.
*
* @return string returns the current locale, or DEFAULT_LANG on error.
*/
function get_lang() {
static $lang; //static variable, so the resulting call to getenv() only fire once
if (!isset($lang) || $lang=="") {
$lang = getenv('LANG');
if (trim($lang)=='')
$lang = DEFAULT_LANG;
}
return $lang;
}
/**
* @param string $text string to translate
* @param string $locale locale to translate to, i.e. de_DE
* @param boolean $provideFallback - provide the original local as a fallback if locale is not recognized
* @return boolean|string returns $text translated to $locale, or FALSE on error.
*/
function translate($text, $locale, $provideFallback = FALSE, $resetLocale = TRUE) {
if ((empty($locale) || trim($locale)=='') && !$provideFallback)
return FALSE;
if (empty($text))
return $text;
$original = get_lang();
//provide a fallback locale in case $locale is not recognized.
if ($provideFallback) {
$l = strval($locale);
if (empty($locale) || trim($locale)=='')
$l = $original; //set locale to the original locale, since none was provided.
$locale = array($l, $original, DEFAULT_LANG);
}
setlocale(LC_ALL, $locale);
$translated = _($text);
if ($resetLocale) {
setlocale(LC_ALL, $original);
}
return $translated;
}
echo get_lang().PHP_EOL;
echo translate("test1", "de_DE.UTF-8") . PHP_EOL;
echo translate("test2", "de_DE.UTF-8") . PHP_EOL;
아마도 로케일에 의존하지 않는 순수한 PHP를 기반으로 PO/MO 파일 파서/gettext를 구현을 사용할 수 있습니까? – deceze
[PHP Gettext Extension과 다국어 웹 사이트에서 PHP 배열 사용?] (http://stackoverflow.com/a/2319192/367456)을 통해 [php-gettext] (https://launchpad.net/php-gettext/)와 같이 입력하십시오.) – hakre