2008-11-06 8 views
0

저는 많은 언어로 입력을 받아 들일 수있는 작은 파서를 만들고 있습니다. 입력을 파싱 할 때 키워드/앵커 역할을하는 어쩌면 50 개의 문자열을 갖게 될 것입니다. PHP에서 이러한 번역 된 키워드를 구성하는 가장 좋은 방법은 무엇입니까?PHP에서 다중 언어 번역하기

내 마음에 가능한 한 가지 해결책은 연관 배열을 사용하는 것입니다. 이처럼 :

$lang = array('us' => array('totalDebt' => 'Total Debt', 'color' => 'Color'), 
       'gb' => array('totalDebt' => 'Total Debt', 'color' => 'Colour')) 

그때 사용하여 액세스 할 수있는 다음

$langCode = 'en'; 
$debtPos = strpos($lang[$langCode]['totalDebt']); 

언어의 무리로 번역 짧은 문자열의 무리와 함께 처리하기위한 더 나은 입증 방법이 있습니까?

+0

"strpos ($ lang [$ langCode] [ 'totalDebt']);"로 무엇을하려하는지 설명 할 수 있습니까? 부품? 그것은 유효한 함수 호출이 아닙니다 .. – nickf

답변

0

사람들은 일반적으로 프로그래머가 코드를 변경할 필요가 없음을 의미하는 현지화 파일을 추가하여 추가 언어를 허용하기 때문에 응용 프로그램에서 l10n (또는 이와 비슷한)을 사용합니다. 그러나 간단한 스크립트 인 경우 full on localization은 과도합니다.

2

전체 번역 솔루션의 경우 gettext과 같은 솔루션을 살펴볼 수 있습니다.

당신은 해결책이 작은 사전을 위해 (자원에, 빠르다) 충분히 좋다. strpos() 함수를 사용하여 무엇을 시도했는지 이해하지 못했습니다.

번역하려는 단어가 언어에 존재하지 않는 경우 대체로 대체 기호를 사용하는 것을 잊지 마십시오. 대개 영어는 영어로 대체됩니다.

0

귀하의 솔루션이 다른 OS 프로젝트에서 사용되는 것을 보았습니다. 그러나 $lang 어레이는 일반적으로 서로 다른 파일로 구성됩니다. 예를 들면 :

<?php // lang.us.php 
$LANG['us'] = array(
        'totalDebt' => 'Total Debt', 
        'color' => 'Color', 
        ); 

등 등 lang.gb.php, lang.de.php에 대한

0

베드로가 말했듯이, 당신은 바로 아이디어를 얻었으나, 다른로 언어를 분리 한 파일. 즉, PHP는 모든 단일 단어의 배열을 모든 단일 언어로 저장하지 않아도됩니다. 한 번에 하나의 언어 만로드하기 때문에 $lang['us'] 중첩 수준을 건너 뛸 수 있습니다.

당신은 심지어 "확장"할 수 언어 :

<?php // lang.en-gb.php 
$lang = array(
    'color' => "Colour", 
    'totalDebt' => "Total Debt", 
    ... 
); 
?> 

<?php // lang.en-us.php 
include('lang.en-gb.php'); 

$lang['color'] = "Color"; 
// don't need to redefine "totalDebt" 
?> 
당신도 당신을 위해 모든 것을 처리하는 기본 클래스를 생성하는 것이 좋습니다

: 로케일을 감지 올바른 파일을 선택, "오류"처리가을 경우 특정 언어 등으로 용어가 정의되지 않았습니다.

0

궁극적으로 코드를 난독 처리하고 '총 부채'를 저장하는 것보다 'total Debt'=> 'Total Debt' 해시 키로. gettext 방법은 문자열을 함수로 묶는 것입니다.

그래서보다는 :

echo "Color"; 

당신이 할 :

echo t("Color"); 

t() 함수는 전역으로 정의 언어에서보고, 가능하면 교체합니다.어떤 점에서, 당신은 gettext를 사용하기를 원할 것입니다. 그리고 이렇게하면 호환 될 것입니다.