PHP로 현지화, 모범 사례 또는 접근법?


11

내 PHP 응용 프로그램을 현지화하고 있습니다. 나는 그것을 달성하기 위해 가장 좋은 방법을 선택하는 것에 대한 딜레마가 있습니다.

방법 1 : 현재 PHP 파일의 배열에 현지화 할 단어를 저장하고 있습니다.

<?php

$values = array (
                        'welcome' => 'bienvenida'
                ); 

?>

요구 사항에 따라 각 단어를 추출하고 반환하는 함수를 사용하고 있습니다.

방법 2 : 동일한 문자열을 저장하는 txt 파일을 사용해야합니까?

<?php
$welcome = 'bienvenida'; 
?>

내 질문은 동일한 것을 개발하기위한 속도와 노력의 관점에서 더 나은 방법은 무엇입니까?

편집 : 두 가지 중 어떤 방법이 응답하는 것이 더 빠르며 왜 그런지 알고 싶습니다. 또한 위의 코드에 대한 개선 사항도 감사하겠습니다!


2
gettext를 고려 했습니까?
sagarchalise

@ sagarchalise 나는 그것을 조사했지만, 나는 내 자신의 방법을 만들고 싶다. 나는 위의 두 가지 중 하나이다. 그래서 어떤 방법이 더 빨리 작동하고 더 신뢰할 수 있는지 알고 싶습니다! :)
sree

속도 측면에서 알고 싶다면 테스트 사례를 수행하십시오. 첫 번째 또는 두 번째 방법으로 1M 배 더 빠르게 실행되는 것은 무엇입니까?
Francisco Presencia

2
잘 작동하는 바퀴를 재발 명하지 마십시오.
gbjbaanb

답변:


10

PHP에는 현지화를위한 훌륭한 내장 기능이 있습니다. 가장 일반적인 방법은 것 같다 gettext에 - 이 튜토리얼 쇼가 사용되는 방법에 대해 설명합니다.

PHP 5.3부터는 더 많은 기능을 제공하는 intl 도 있습니다 (예를 들어 로케일에 따라 숫자, 날짜 및 통화 형식을 지정하기 위해).


귀하의 답변에 감사드립니다. 그러나 속도와 신뢰성 측면에서 어떤 방법이 더 나은지를 위에서 알 수 있습니까?
sree

10

첫째, gettext좋은 방법입니다. 처음에 쉽게 들리지 않으면 무시하지 마십시오. 그러나 알아야 할 다른 옵션도 있습니다. 설명하기 전에 먼저 제안 사항을 살펴 보겠습니다.

당신에 array이 일을 웨이, 당신은 꽤 많은 간단한 해결책을 가지고 있습니다. 좋은 점은 번역을 데이터 스토리지에 저장 한 다음 PHP 스크립트에 배열로로드하는 것입니다. 그러나 배열을 PHP 파일에 정적으로 저장하려면 편집하려면 a) PHP 프로그래머 또는 PHP 구문에 익숙한 숙련 된 사용자가 파일을 편집하기 만하면됩니다. b) 4-5 개의 다른 언어 파일간에 동기화 상당히 성 가시고 오류가 발생할 수 있습니다.

여기서 고려해야 할 것은 나중에 언어 파일에 새 요소를 추가하는 방법은 무엇입니까? 번역가에게 맡기거나 PHP 프로그래머가 있어야합니까?

당신 variable의 방법은 실용적이지 않습니다. 왜? 나는 적어도 당신의 응용 프로그램에 몇 가지 기능이 있다고 가정합니까? 그런 다음 함수를 호출 할 때 이러한 변수를 모두 전달해야 global합니다. 이런 식으로 10 개 이상의 변수가 있다고 생각하면 이렇게하지 않는 것이 좋습니다. 이름 충돌도있을 수 있습니다. 같은 이름으로 다른 변수의 값을 무시할 수도 있지만 밑줄처럼 간단한 접두사를 추가하면이 문제를 해결할 수 있습니다 $_welcome. 어쨌든, 내가 당신이라면 나는 그것에 대해 생각조차하지 않을 것입니다. 하지마

이를 수행하는 좋은 방법 중 하나 는 접두사로 상수 를 정의하는 것입니다 . 그래서, 예를 들어 en.lang.php당신이 뭔가를해야합니다 define( 'LABEL_WELCOME', 'Welcome' );그리고 당신의 no.lang.php, 당신은 것입니다 define ( 'LABEL_WELCOME', 'Velkommen' );. 변수 대신 상수를 사용하는 좋은 점은 스크립트에서 항상 사용할 수 있다는 것입니다. 따라서 주입하거나 전역 화 할 필요가 없습니다. 배열과 변수에 비해 PHP가 처리하는 방식으로 인해 속도가 빠릅니다. 메모리에서 공간을 덜 차지합니다. 단점은 번역기에 전달할 수 없기 때문에 다시 PHP 개발자가 필요하다는 것입니다. 또한 파일 간 동기화는 약간의 고통이 될 수 있습니다.

다른 옵션은 번역을 검색하기 위한 함수 또는 클래스 / 방법 을 갖는 것입니다. 효율성이 떨어질 것입니다. 그러나 전혀 마이크로 최적화가 필요하다고 생각하지는 않지만 추가 이점은 번역을 검색하는 동안 사용자 정의 논리를 적용 할 수 있다는 것입니다. 예를 들어 언젠가 사랑하는 프로젝트 관리자가 모든 텍스트를 대문자로 숨길 수 있는지 묻는다고 상상해보십시오. 당신은 그것을 거부 할 수 없기 때문에, 그 사이에 기능이 있으면 모든 번역에 패턴을 적용 / 변경해야 할 때 많은 도움이 될 수 있습니다.

그것을 마무리하려면 :

  1. 번역가가 어떻게 그것을 사용할 수 있는지 생각하고 작동하는 KISS 솔루션을 생각해보십시오.

  2. 다른 언어 간 동기화를 유지하는 방법에 대해 생각해보십시오.

  3. 동일한 번역이 필요한지 생각해보십시오. 모바일 앱에 대해 말하십시오. 크로스 플랫폼 솔루션으로 시간을 절약 할 수 있습니다. JSON 및 일반 데이터베이스를 닫지 마십시오.

  4. 번역을 검색 할 때 논리를 어떻게 적용 / 변경할 수 있는지 생각해보십시오.

  5. 성능을 잊었습니다. 상수변수함수 호출 과 같은 미세 최적화를 수행하지 못하는 횟수는 99.9 %입니다 . 나는 개발자 / 직원으로서의 시간이 프로세서 시간보다 비싸다고 가정합니다.

업데이트 # 1

나는 선한 질문에 대한 답변을 게시했습니다. 왜 아무도 여기에 아무 말도하지 않습니까? 이러한 경우에 대한 경고가 필요합니다.

업데이트 # 2

오른쪽에는 1 년 전의 질문이 있습니다. 그러나 그것은 2 년 전에 요청되었습니다! 여기에 모든 것이 오도됩니다!


U : 시간 여행자가 시간으로 돌아간 것처럼 보입니다 :) 대답을 위해 tnx!
sree

3
@sree 네! 2014 년 4 월 4 일부터옵니다! 2012 년에 Facebook 또는 WhatsApp 주식을 구매하면 2014 년에 PHP 코드를 작성할 필요가 없습니다!
Mahdi

1
rofl 동의 !!!
sree
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.